1

我已经把头撞了太久了!我有一个字符串:2012-09-27T18:00:00.000-04:00 我有一个格式:[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'Z'"]; 我得到一个空结果转换字符串。有人可以帮助正确的日期格式吗?

4

1 回答 1

5

根据 NSDateFormatter 的文档:

格式字符串使用 Unicode 技术标准 #35 中的格式模式。标准的版本随操作系统的发布而变化:

OS X v10.8 和 iOS 6.0 中的格式化程序使用 [版本 tr35-25]。

按照该链接:

s 1..2 12 秒。使用一个或两个进行零填充。

换句话说,sfor seconds 只意味着不可分割的部分。

但就在其下方,有:

S 1..n 3456 小数秒 - 截断(与其他时间字段一样)到字母数。(示例显示使用模式 SSSS 显示秒值 12.34567)

然后,您不匹配时区的原因是您引用了Z,因此它匹配文字Z而不是时区格式。

为了匹配您看到的 ISO8601 时区格式,相同的文档说您需要 ZZZZZ。

所以,看起来,至少对于 10.8/iOS 6,你想要:

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ"]

对于早期版本,您已经获得了文档的链接;你现在应该可以弄清楚了。

对此进行测试(在 Python 中,以节省几行代码):

>>> import Cocoa
>>> df = Cocoa.NSDateFormatter.alloc().init()
>>> df.setDateFormat_("yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ")
>>> print df.dateFromString_(2012-09-27T18:00:00.000-04:00')
2012-09-27 22:00:00 +0000
于 2012-09-21T00:55:41.257 回答