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

我有关于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"]];

所有的工作都很好,直到在某些带有一些语言环境的设备上启动构建。 My 07-05-2013 10:08:30.000来自服务器的字符串不会被解析,并且dateFromString返回nil

我没有为格式化程序设置语言环境,但我希望dateFormat足以解析日期,即使没有显式语言环境。

有关于此的任何想法? 谢谢!


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

明确设置区域设置将起作用。 设置24小时格式的下列语言环境。 12小时你设置en_US。

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

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

链接地址: http://www.djcxy.com/p/35169.html

上一篇: Exception parsing NSDate from NSString with explicit formatter

下一篇: Format date on iPhone returns (null)