ios - 使用 '(UTC)'(来自 MIME header )解析长格式日期的 NSDateFormatter 格式

标签 ios swift nsdateformatter

我正在尝试从旧电子邮件的 MIME header 中解析一些日期:

"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()

最佳答案

格式 "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 小时制时间设置时出现的问题。

关于ios - 使用 '(UTC)'(来自 MIME header )解析长格式日期的 NSDateFormatter 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635068/

相关文章:

swift - 我得到了我不能得到的可选值。 swift 3.2

ios - WKWebView 函数用于检测 URL 是否已更改

ios - Swift:Date() 到 UTC 全局时间字符串

ios - 打开从 DropBox 应用程序到我的应用程序的链接

ios - 显示一个 NSProgressIndicator

iOS 通知。使用哪一个?

ios - NSDateFormatter 广告 10 小时?

ios - 如何触发 UISearchBar 委托(delegate)单次?

arrays - 快速将字符串数组转换为 Double

ios - NSDateFormatter 无法格式化以前存储的日期