【问题标题】:NSDateFormatter returns nil sometimesNSDateFormatter 有时返回 nil
【发布时间】:2015-01-28 01:30:15
【问题描述】:

我创建了一个 NSDateFormatter,但有时它会根据给定的字符串创建一个 NSDate,有时它不在同一设备(模拟器)上。

这是我的代码:

NSString *lastModifiedString = [metaData objectForKey:@"Last-Modified"];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy hh:mm:ss Z"];
    NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString];

例如字符串 “Fri, 09 Jan 2015 15:08:01 GMT”它返回 nil,但对于“Fri, 12 Dec 2014 09:15:52 GMT”它返回正确的 NSDate。

我尝试在日期格式中添加括号,并尝试将语言环境设置为“en_US_POSIX”,我尝试使用小 z 而不是大 z,但都不起作用。

我做错了什么?感谢您的帮助。

【问题讨论】:

  • 只是一个猜测:它解析 12:59:59 OK,但在 13:00:00 失败。这两者有什么不同?
  • 问题是hh,因为它以 12 小时格式表示小时。因此 15 无效。使用HH,用于24小时格式。

标签: ios nsdateformatter


【解决方案1】:

NSDateFormatter 遵循 Unicode standard for date and time patterns. 在 24 小时制上使用“H”表示小时:

所以在你的代码中,正确的方式应该是:

NSString *lastModifiedString = [metaData objectForKey:@"Last-Modified"];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
    NSDate *onlineModDate = [dateFormatter dateFromString:lastModifiedString];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多