依赖于硬件的NSDateFormatter dateFromString:bug(返回nil)

use*_*941 5 nsdate nsdateformatter ios iphone-5

我有几个日期字符串,我需要转换为NSDates.我的解析代码如下:

NSString *s = [pair objectForKey:@"nodeContent"];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZ"];
self.date = [f dateFromString:s];
Run Code Online (Sandbox Code Playgroud)

上面的代码在我们测试的所有设备和模拟器中都能正常工作.奇怪的是,当上述代码在运行iOS 6.1或7.0.x的任何iPhone 5上运行时,该行self.date = [f dateFromString:s];每次都返回nil.

我已检查并且字符串s存在并且在与正确解析日期的设备并排比较时包含相同的字符.

这是一个示例日期字符串:`2013-10-31T21:50:00-06:00'

我在这里错过了什么吗?

rma*_*ddy 12

这是因为您没有将日期格式化程序的语言环境设置为特殊en_US_POSIX语言环境.很可能你的iPhone 5在24小时设置中有不同的设置.

每当解析固定格式字符串时,都需要设置特殊区域设置.

  • 谢谢.我添加了一行`[f setLocale:[NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]];`它现在有效. (3认同)