【问题标题】:Exception parsing NSDate from NSString with explicit formatter使用显式格式化程序从 NSString 解析 NSDate 的异常
【发布时间】:2013-07-05 11:22:34
【问题描述】:

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

对此有什么想法吗?谢谢!

【问题讨论】:

  • 你试过不使用 setTimeZone 吗?

标签: nsdate locale nsdateformatter


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-08
    • 2015-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-23
    • 1970-01-01
    • 2010-12-31
    相关资源
    最近更新 更多