【问题标题】:NSDateFormatter string with subseconds and timezone带有亚秒和时区的 NSDateFormatter 字符串
【发布时间】:2012-09-21 00:39:42
【问题描述】:

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

【问题讨论】:

  • 基本问题是 NSDateFormatter 不会处理该时间戳样式中的最后一个“:”(时区中的那个),因此您必须在尝试解析时间戳之前以某种方式将其删除。

标签: objective-c


【解决方案1】:

根据 NSDateFormatter 的文档:

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

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

点击该链接:

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

换句话说,s for 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

【讨论】:

    猜你喜欢
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 2013-01-09
    • 2018-05-24
    • 2012-05-04
    • 1970-01-01
    • 2021-12-05
    • 1970-01-01
    相关资源
    最近更新 更多