当前位置:  开发笔记 > IOS > 正文

ISO8601DateFormatter不解析ISO日期字符串

如何解决《ISO8601DateFormatter不解析ISO日期字符串》经验,为你挑选了1个好方法。

我正在尝试解析这个问题

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]

任何的想法?谢谢!



1> vadian..:

在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)


小心FractionalSeconds崩溃到11.2。它已在11.2+中修复
它随[macOS 10.13/iOS 11 SDK]一起添加(https://developer.apple.com/documentation/foundation/iso8601dateformatter.options/2923300-withfractionalseconds)
推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有