使用显式格式化程序从NSString解析NSDate的异常

时间:2013-07-08 07:43:35

标签: nsdate locale nsdateformatter

我有一个关于NSDate解析的奇怪问题。我有一个来自服务器的特定日期格式,以及我如何配置我的NSDateFormatter:

self.serverDateFormatter = [[NSDateFormatter alloc] init];
[self.serverDateFormatter setDateFormat:@"dd-MM-yyyy HH:mm:ss.SSS"];
[self.serverDateFormatter setTimeZone:[NSTimeZone timeZoneWithName:@"UTC"]];

使用它:

[self.serverDateFormatter dateFromString:[fields valueForKey:@"dateCreated"]];

所有工作都完美无缺,直到在某些具有某些语言环境的设备上启动了构建。来自服务器的07-05-2013 10:08:30.000字符串无法解析,dateFromString会返回nil

我没有为格式化程序设置区域设置,但我希望即使没有明确的区域设置,dateFormat也足以解析日期。

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:0)

问题在于NSDateFormatter会自动获取设备首选项,例如时区,区域设置,时间格式(12或24小时)。在这种情况下,日期格式化程序的格式与服务器的传入日期不匹配,因此日期变为零。

显式设置区域设置将起作用。将下面的区域设置为24小时格式。 12小时你设置en_US。

NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
[dateFormatter setLocale:locale];

最好的办法是确保只在服务器中存储24小时格式(如果可能)。如果可能,请确保将24小时格式时间发送到服务器或在服务器中进行日期格式转换。