带有subseconds和timezone的NSDateFormatter字符串

jan*_*o42 1 objective-c

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

aba*_*ert 5

根据NSDateFormatter的文档:

格式字符串使用Unicode技术标准#35中的格式模式.该标准的版本因操作系统的发布而异:

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

以下链接:

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

换句话说,s秒表示只有整数部分.

但就在下面,有:

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

然后,你没有匹配时区的原因是你引用了Z它,所以它匹配文字Z而不是时区格式.

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

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

[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss'.'SSSZZZZZ"]
Run Code Online (Sandbox Code Playgroud)

对于早期版本,您已获得指向文档的链接; 你应该能够弄明白了.

测试这个(在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
Run Code Online (Sandbox Code Playgroud)