0

ユーザーの日付設定を使用して日付を解析しようとしています

[NSDateFormatter setDefaultFormatterBehavior:NSDateFormatterBehavior10_4];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
NSDate *date = [ dateFormatter dateFromString:@"7/4/2008" ];
NSLog(@"string from date %@: %@ for locale %@", date, [dateFormatter stringFromDate:date], [[dateFormatter locale] localeIdentifier]);

(国際システム環境設定で)自分の地域を米国に設定すると、次のように出力されます。

2008-08-14 20:20:31.117 Date Difference17226:10b string from date 2008-07-04 00:00:00 -0400: 7/4/08 for locale en_US

そして、私の地域がイギリスの場合、次のように印刷されます。

2008-08-14 20:19:23.441 Date Difference17199:10b string from date 2008-04-07 00:00:00 -0400: 07/04/2008 for locale en_GB

NSDateFormatterはリージョンの変更に影響されないようです。ただし、日付の生の印刷が地域によって適切に切り替わっていることに注意してください。

NSDateFormatterがリージョン設定を尊重するようにするにはどうすればよいですか?

4

2 に答える 2

3

NSDateFormatter は地域の変更に影響されないようです。

いいえ、双方向でロケールを使用しています。

日付の説明 (フォーマットの最初の部分) を見ると、フォーマッタが日付をどのように解釈したかがわかり%@ますNSLog
地域が US の場合、フォーマッターは日付を2008-07-04 (July 4)と解釈しました。
リージョンが GB の場合、フォーマッタは日付を2008-04-07 (April 7)と解釈しました。

次に、同じ地域の同じフォーマッターにその日付を表示するように依頼しました。
米国形式を使用した 7 月 4 日は 07/04/2008 (MM/DD/YYYY) です。
GB 形式を使用した 4 月 7 日は 2008 年 7 月 4 日 (DD/MM/YYYY) です。

于 2008-11-04T19:14:19.207 に答える
0

これは正しいように見えます。最初の出力サンプルでは、​​書式設定された日付文字列は 7/4/200 です。2 つ目は、2008 年 7 月 4 日です。

どのような違いを期待していましたか?

英国の優先日付形式の形式設定を変更しなかった場合、デフォルトで MM/DD/YYYY に設定され、月と日が 10 未満の場合は先頭にゼロが付くと思います。

于 2008-11-04T18:55:53.317 に答える