我试图从旧电子邮件的MIME标题中解析一些日期:
"Sun, 31 Aug 2008 23:38:35 +0000 (UTC)"因为有很多不同的字符串,所以我在循环中创建日期格式化字符串。不幸的是,这些都没有捕捉到这一个,但我不知道为什么?
let date = "Sun, 31 Aug 2008 23:38:35 +0000 (UTC)"
extension String {
func toDate() -> Date? {
var date: Date?
let dateFormatter = DateFormatter()
let formats = [
"yyyy-MM-dd HH:mm:ss",
"E, d MMM yyyy HH:mm:ss Z",
"E, d MMM yyyy HH:mm:ss Z (z)",
"E, d MMM yyyy HH:mm:ss",
"yyyy-MM-dd'T'HH:mm:ssZ"
]
formats.forEach { (format) in
dateFormatter.dateFormat = format
if let parsed = dateFormatter.date(from: self) {
date = parsed
} else {
print(":(")
}
}
return date
}
}
date.toDate()发布于 2018-04-03 16:42:27
"E, d MMM yyyy HH:mm:ss Z (z)"格式适用于"Sun, 31 Aug 2008 23:38:35 +0000 (UTC)"。但是,只有当用户的语言环境设置为英语时,它才能工作。解析固定格式日期字符串时,请确保将日期格式化程序的区域设置为en_US_POSIX
dateFormatter.locale = Locale(identifier: "en_US_POSIX")这不仅确保它正确处理英语工作日和月份名称,而且还避免了如果用户更改了设备上的12/24小时时间设置的问题。
https://stackoverflow.com/questions/49635068
复制相似问题