从字符串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到末尾的所有内容

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...