0

我有一个关于 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即使没有明确的语言环境也足以解析日期。

有什么想法吗?谢谢!

4

1 回答 1

0

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

明确设置语言环境将起作用。将以下语言环境设置为 24 小时格式。12 小时,您设置 en_US。

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

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

于 2013-07-08T12:42:18.223 回答