我有一个关于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
也足以解析日期。
有什么想法吗?谢谢!
答案 0 :(得分:0)
问题在于NSDateFormatter
会自动获取设备首选项,例如时区,区域设置,时间格式(12或24小时)。在这种情况下,日期格式化程序的格式与服务器的传入日期不匹配,因此日期变为零。
显式设置区域设置将起作用。将下面的区域设置为24小时格式。 12小时你设置en_US。
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_GB"];
[dateFormatter setLocale:locale];
最好的办法是确保只在服务器中存储24小时格式(如果可能)。如果可能,请确保将24小时格式时间发送到服务器或在服务器中进行日期格式转换。