2008-11-04 105 views
0

我试图使用用户的日期喜好NSDateFormatter不会使用语言环境设置解析日期?

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

回答

0

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

你期待什么不同?

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

3

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

不,它在两个方向上使用语言环境。

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

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

相关问题