我正在尝试解析
2017-01-23T10:12:31.484Z
使用ISO8601DateFormatter提供的本机类,iOS 10但总是失败。如果字符串不包含毫秒,Date则创建对象不会出现问题。
ISO8601DateFormatter
iOS 10
Date
我已经尝试过很多options组合,但总是失败…
options
let formatter = ISO8601DateFormatter() formatter.timeZone = TimeZone(secondsFromGMT: 0) formatter.formatOptions = [.withInternetDateTime, .withDashSeparatorInDate, .withColonSeparatorInTime, .withColonSeparatorInTimeZone, .withFullTime]
任何想法?谢谢!
macOS 10.13之前的版本/ iOS 11 ISO8601DateFormatter不支持包括毫秒在内的日期字符串。
一种解决方法是使用正则表达式删除毫秒部分。
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)
在macOS 10.13 + / iOS 11+中,添加了新选项以支持小数秒:
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)