ISO8601DateFormatter doesn't parse ISO date string

前端 未结 4 956
长情又很酷
长情又很酷 2020-12-17 07:40

I\'m trying to parse this

2017-01-23T10:12:31.484Z

using native ISO8601DateFormatter class provided by iOS 1

4条回答
  •  失恋的感觉
    2020-12-17 08:19

    Prior to macOS 10.13 / iOS 11 ISO8601DateFormatter does not support date strings including milliseconds.

    A workaround is to remove the millisecond part with regular expression.

    let isoDateString = "2017-01-23T10:12:31.484Z"
    let trimmedIsoString = isoDateString.replacingOccurrences(of: "\\.\\d+", with: "", options: .regularExpression)
    let formatter = ISO8601DateFormatter()
    let date = formatter.date(from: trimmedIsoString)
    

    In macOS 10.13+ / iOS 11+ a new option is added to support fractional seconds:

    static var withFractionalSeconds: ISO8601DateFormatter.Options { get }

    let isoDateString = "2017-01-23T10:12:31.484Z"
    let formatter = ISO8601DateFormatter()
    formatter.formatOptions =  [.withInternetDateTime, .withFractionalSeconds]
    let date = formatter.date(from: isoDateString)
    

提交回复
热议问题