NSDateFormatter不会使用区域设置来解析日期?

时间:2008-11-04 12:46:22

标签: objective-c cocoa macos internationalization date

我正在尝试使用用户的日期偏好设置来解析日期

[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尊重区域设置?

2 个答案:

答案 0 :(得分:3)

  

看起来NSDateFormatter对区域的变化不敏感。

不,它正在两个方向上使用区域设置。

您可以通过查看日期的说明(%@格式的第一个NSLog)来查看格式化程序如何解释日期。
由于该地区为美国,格式化程序将日期解释为2008- 07-04(7月4日)。 区域为GB,格式化程序将日期解释为2008- 04-07(4月7日)

然后,您要求同一地区的同一格式器显示该日期 7月4日使用美国格式是07/04/2008(MM / DD / YYYY) 4月7日使用GB格式是07/04/2008(DD / MM / YYYY)。

答案 1 :(得分:0)

这看起来是正确的。在第一个输出示例中,格式化的日期字符串是7/4/200。在第二个,它是07/04/2008。

您期望有什么不同?

如果您没有更改英国首选日期格式的格式首选项,我相信它默认为MM / DD / YYYY,前导零为数月和日小于10。