问题描述
我正在尝试使用以下代码将“星期三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到末尾的所有内容