当在模拟器和真实设备上将 Settings/General/International/Calendar 设置为日语或佛教时,我发现 iOS 上的 NSDateFormatter 存在问题。语言设置为什么似乎并不重要,区域格式只是重新安排事情(但它仍然很糟糕)。以下结果均适用于 'Language' = English 和 'Region Format' = Japan 时的结果。
这是我的代码(启用了 ARC):
// Configure the Date Formatter
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setLocale:[NSLocale currentLocale]];
[dateFormatter setDateStyle:NSDateFormatterShortStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
// Format the date string
NSString *dateString = [dateFormatter stringFromDate:[NSDate date]];
结果:
- iOS 4.3(日历 = 日语),dateString = “平成24/04/13”</li>
- iOS 5.1(日历 = 日语),dateString = “H.24/04/09”</li>
- iOS 4.3(日历 = 佛教),dateString = “BE2555/04/13”</li>
- iOS 5.1(日历 = 佛教),dateString = “BE2555/04/13”</li>
我找到了这个链接: http: //www.cocoanetics.com/2011/12/ios-5-break-nsdateformatter/,这很有趣,但并没有真正指出我的解决方案。我还发现了这个:NSDateFormatter 和 Japanese calendar,所以我稍微改变了我的代码:
[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]]];
然后我的结果是这样的(这些对我来说似乎都是错误的,本质上是美国 MM/DD/YY 格式):
- iOS 4.3(日历 = 日语),dateString = “4/13/12”</li>
- iOS 5.1(日历 = 日语),dateString = “4/13/12”</li>
- iOS 4.3(日历 = 佛教),dateString = “4/13/12”</li>
- iOS 5.1(日历 = 佛教),dateString = “4/13/12”</li>
在上述所有结果中,唯一对我来说正确的是带有 Calendar = Japanese 的 iOS4.3。
有任何想法吗?