【问题标题】:Swift: How to parse date & time string with timezone abbreviation?Swift:如何使用时区缩写解析日期和时间字符串?
【发布时间】:2019-12-31 16:21:14
【问题描述】:

我从服务器收到一个日期和时间字符串,其中包含以不寻常方式格式化的时区信息:

2017-05-05T12:24:16.286462Z[UTC]

我想使用DateFormatter 来解析它,但我不知道应该使用什么日期格式。

我尝试用 "yyyy-MM-dd'T'HH:mm:ss.SSSZ'['R']'" 或类似的东西解析它,但没有运气。

这是我的代码:

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en-US")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ'['R']'"
let date = dateFormatter.date(from: date)

这个字符串的正确日期格式是什么?

【问题讨论】:

  • 看看这个updated answer
  • @chirag90 感谢您的帮助,但我正试图达到相反的效果。我正在寻找将字符串解析为日期的方法,而不是将日期打印为字符串。
  • 更新了我的评论

标签: swift datetime dateformatter


【解决方案1】:

好的,伙计们,我想通了。

正确的格式是

"yyyy-MM-dd'T'HH:mm:ss.SSS'Z['zzz']'"

zzz 是时区缩写,而Z[] 被视为纯文本。

【讨论】:

    【解决方案2】:

    ISO8601DateFormatter 的替代方法。 [UTC] 部分被正则表达式剥离

    let dateString = "2017-05-05T12:24:16.286462Z[UTC]"
    
    let formatter = ISO8601DateFormatter()
    formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
    let date = formatter.date(from: dateString.replacingOccurrences(of: "\\[^\\[+\\]", with: "", options: .regularExpression))
    

    【讨论】:

    • 你测试了吗?你确定挂“Z”字不会有问题吗?
    • @MateuszChechliński 是的,我确定。但请随意使用模式"Z\\[^\\[+\\]"
    猜你喜欢
    • 2010-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 2018-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多