当日历是日语或佛教徒时,iOS NSDateFormatter格式不正确

时间:2012-04-13 13:34:05

标签: ios nsdateformatter

我在iOS上看到NSDateFormatter出现问题,当设置/通用/国际/日历在模拟器和真实设备上都设置为日语或佛教徒时。语言的设置似乎并不重要,而区域格式只重新排列(但它仍然很糟糕)。以下结果均适用于“语言”=英语和“地区格式”=日本的情况。

这是我的代码(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”
  • iOS 5.1(日历=日语),dateString =“H.24 / 04/09”
  • iOS 4.3(日历=佛教徒),dateString =“BE2555 / 04/13”
  • iOS 5.1(日历=佛教徒),dateString =“BE2555 / 04/13”

我找到了这个链接:http://www.cocoanetics.com/2011/12/ios-5-breaking-nsdateformatter/,这很有意思,但并没有真正指向我的解决方案。我还发现了这个:NSDateFormatter and Japanese calendar,所以我稍微更改了我的代码:

[dateFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:[[NSLocale preferredLanguages] objectAtIndex:0]]];    

然后我的结果是这些(这些对我来说都是错误的,基本上是美国MM / DD / YY格式):

  • iOS 4.3(日历=日语),dateString =“4/13/12”
  • iOS 5.1(日历=日语),dateString =“4/13/12”
  • iOS 4.3(日历=佛教徒),dateString =“4/13/12”
  • iOS 5.1(日历=佛教徒),dateString =“4/13/12”

在上述所有结果中,唯一看起来正确的是带有日历=日语的iOS4.3。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

该区域影响日期格式,而不是语言。您正在设置格式以使用用户的区域:

[dateFormatter setLocale:[NSLocale currentLocale]];

如果您希望所有用户都采用一致的格式,可以将其设置为系统的本地格式:

[dateFormatter setLocale:[NSLocale systemLocale]];