4

当在模拟器和真实设备上将 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。

有任何想法吗?

4

1 回答 1

4

The region is what effects the date format, not the language. You're setting the format to use the user's region:

[dateFormatter setLocale:[NSLocale currentLocale]];

If you want a consistent format across all users you can set it to the system's local:

[dateFormatter setLocale:[NSLocale systemLocale]];

于 2015-01-21T21:42:04.297 回答