2008-11-04 136 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)。