微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从字符串iOS Swift 5转换日期

如何解决从字符串iOS Swift 5转换日期

我正在尝试使用以下代码将“星期三2020年10月14日05:31:08 GMT + 0000(世界标准时间)”转换为快速日期

let DATE_FORMAT = "E MMM dd yyyy HH:mm:ss z"

let isoDate = "Wed Oct 14 2020 05:31:08 GMT+0000 (Coordinated Universal Time)"

let dateFormatter = DateFormatter()
dateFormatter.dateFormat = DATE_FORMAT
dateFormatter.timeZone = TimeZone(identifier: "UTC")

print(dateFormatter.date(from: isoDate))

返回nil,我认为我没有正确指定日期格式,我们将不胜感激

解决方法

Unicode LDML date format不支持GMT+0000(但是它支持GMT+00:00)也不支持(Coordinated Universal Time)这样的字符串

一种可能的解决方案是使用正则表达式从字符串中删除非标准部分

let dateFormat = "E MMM dd yyyy HH:mm:ss Z"

let isoDate = "Wed Oct 14 2020 05:31:08 GMT+0000 (Coordinated Universal Time)"

let dateFormatter = DateFormatter()
dateFormatter.locale = Locale(identifier: "en_US_POSIX")
dateFormatter.dateFormat = dateFormat
dateFormatter.timeZone = TimeZone(identifier: "UTC")
let trimmedIsoDate = isoDate.replacingOccurrences(of: "GMT([+-]\\d{4})\\s\\([^)]+\\)",with: "$1",options: .regularExpression)
print(dateFormatter.date(from: trimmedIsoDate))

该模式捕获+0000部分,并用捕获的时区替换从GMT到末尾的所有内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。