25

問題が発生しています。着信時間文字列を12時間形式で取得し、それらをNSDateオブジェクトに変換しています。iPhoneが12時間形式の場合、問題ありません。しかし、24時間形式の場合、問題が発生します。デモ用のサンプルコードは次のとおりです。

NSString *theTime = @"3:19 PM";
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"h:mm a"]; // "3:19 PM"
NSDate *date = [formatter dateFromString:theTime];
NSString *theString = [formatter stringFromDate:date];

24時間モードでは、日付は1970-01-01 03:19:00で、文字列は「3:19」です-間違っています

12時間モードでは、日付は1970-01-01 15:19:00で、文字列は「3:19PM」です-右

だから...質問1:デバイスの24時間設定が私の日付フォーマッター設定を上書きするのはなぜですか?

さらに重要なことに、質問2:12時間制から24時間制に適切に変換するにはどうすればよいですか?

電話が24時間モードであるかどうかを検出するコードはすでにありますが、文字列を掘り下げて3を15に交換する以外に、これを行うためのクリーンな方法はないようです。

4

5 に答える 5

29

それでも必要かどうかはわかりませんが、日付フォーマッターのロケールを設定することで解決した同様の問題が発生しました。つまり、ユーザーの24/12時間モードの設定に関係なく、強制的に12時間モードにする場合は、ロケールをen_US_POSIXに設定する必要があります。

于 2010-05-27T21:53:20.633 に答える
14

この動作の理由はロケールです。正しいロケールを設定してください

    NSString * strAgendaDate = @ "01/17/2012 12:00 AM";
    NSDateFormatter * dateFormatter = [[NSDateFormatter alloc] init];

    [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@ "en_US"] autorelease];

    [dateFormatter setDateFormat:AgendaDateFormatForMeeting];
    NSDate * MeetingDate = [dateFormatter dateFromString:aStrDate];
    [dateFormatter setDateFormat:AgendaDateRepresentation];
    strAgendaDate = [dateFormatter stringFromDate:meetingDate];

24時間形式と12時間形式の両方で機能します

于 2012-09-12T12:03:57.137 に答える
6

@ "h:mma"は@"HH:mma"である必要があると思います。

ココアでビルド済みのdateformatterを使用すると、すべてが自動的に処理されます。

NSDateFormatter *timeFormatter = [[[NSDateFormatter alloc] init] autorelease];
[timeFormatter setTimeStyle:NSDateFormatterShortStyle];
[timeFormatter setDateStyle:NSDateFormatterNoStyle];

NSDateFormatterShortStyleNSDateFormatterNoStyleさまざまな種類があります。これらを使用すると、ユーザーが日付と時刻に対して選択した設定を尊重するようになります。

12〜14時間のクロック変換は、SDKによって処理されます。日付を格納するためのモデルまたは値オブジェクトがある場合は、それらをとして保持してみてくださいNSDate。このようにして、表示する必要がある場合にのみフォーマットできます。日付を文字列として保存すると、GMTが個別に指定されているxmlから日付を解析したり、加算と減算を試みたりすると、問題が発生する可能性がありますNSTimeIntervals

于 2010-02-01T00:16:10.687 に答える
6

@ "hh:mm:ss"から@ "HH:mm:ss"に変更し、時間スタイルを" 1:03PM "から" 13:03 "に変更しました。これがお役に立てば幸いです。

于 2014-01-28T09:04:44.933 に答える
1

さて、私はコメントを残しました、しかしそれはすべてのコードを一緒に押しつぶしたので、私はコメントで私の質問に「答える」必要があります:

ありがとう。私はそれにこのコードで旋風を与えました:

NSString *theTime = @"3:19 PM"; 
NSDateFormatter *timeFormatter = [[[NSDateFormatter alloc] init] autorelease];       
[timeFormatter setTimeStyle:NSDateFormatterShortStyle]; 
[timeFormatter setDateStyle:NSDateFormatterNoStyle]; 
NSDate *date = [timeFormatter dateFromString:theTime]; 
NSString *theString = [timeFormatter stringFromDate:date]; 

そして、日付はゼロになります。このルートを試したときにこれに遭遇しましたが、機能していません。とてもイライラします。

于 2010-02-01T00:49:54.427 に答える