ISO8601DateFormatter不解析ISO日期字符串
我正在尝试解析
2017-01-23T10:12:31.484Z
使用ISO8601DateFormatter
提供的本机类,iOS 10
但总是失败。如果字符串不包含毫秒,Date
则创建对象不会出现问题。
我已经尝试过很多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)
以上是 ISO8601DateFormatter不解析ISO日期字符串 的全部内容, 来源链接: utcz.com/qa/408080.html