【问题标题】:Swift `yyyy-MM-dd'T'HH:mm:ss.sssZ` string to date [duplicate]Swift `yyyy-MM-dd'T'HH:mm:ss.sssZ` 字符串到日期 [重复]
【发布时间】:2019-08-24 19:07:54
【问题描述】:

我正在使用以下代码将日期字符串格式化为日期对象。但是对于某些日期字符串它可以工作,而对于某些它返回 nil。

格式 = "yyyy-MM-dd'T'HH:mm:ss.sssZ"

“2019-04-02T09:47:24.055Z”作品

“2019-03-27T22:31:17.140Z”不起作用

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.sssZ"


let date = dateFormatter.date(from: "2019-03-27T22:31:17.140Z")

【问题讨论】:

  • 查看您的日期格式。秒和小数秒的格式说明符不能相同
  • 根据@vadian 的建议,您需要将您的格式从yyyy-MM-dd'T'HH:mm:ss.sssZ 更改为yyyy-MM-dd'T'HH:mm:ss.SSSZ

标签: ios swift


【解决方案1】:

您的格式错误。它应该是: "yyyy-MM-dd'T'HH:mm:ss.SSSZ" 在这里查看日期时间格式: https://unicode.org/reports/tr35/tr35-dates.html#Date_Format_Patterns

【讨论】:

    【解决方案2】:
    let dateFormatter = DateFormatter()
            dateFormatter.locale = Locale(identifier: "en_US_POSIX")
            dateFormatter.timeZone = TimeZone(secondsFromGMT: 0)
            dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
    
    
            let date = dateFormatter.date(from: "2019-04-02T09:47:24.055Z")
            let date1 = dateFormatter.date(from: "2019-03-27T22:31:17.140Z")
            print(">>>>>!!", date, date1)
    

    可选(2019-04-02 09:47:24 +0000) 可选(2019-03-27 22:31:17 +0000)

    上面的代码按预期工作。

    使用SSS 而不是sss

    对于您的情况 yyyy-MM-dd'T'HH:mm:ss.sssZ2019-04-02T09:47:24.055Z 输出是:

    可选(2019-04-02 09:47:55 +0000) 无

    看看分钟和秒:)

    【讨论】:

    • 谢谢。它工作了:-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多