首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用'(UTC)‘解析长表日期的NSDateFormatter格式(来自MIME头)

用'(UTC)‘解析长表日期的NSDateFormatter格式(来自MIME头)
EN

Stack Overflow用户
提问于 2018-04-03 16:36:40
回答 1查看 42关注 0票数 0

我试图从旧电子邮件的MIME标题中解析一些日期:

代码语言:javascript
运行
复制
"Sun, 31 Aug 2008 23:38:35 +0000 (UTC)"

因为有很多不同的字符串,所以我在循环中创建日期格式化字符串。不幸的是,这些都没有捕捉到这一个,但我不知道为什么?

代码语言:javascript
运行
复制
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()
EN

Stack Overflow用户

回答已采纳

发布于 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

代码语言:javascript
运行
复制
dateFormatter.locale = Locale(identifier: "en_US_POSIX")

这不仅确保它正确处理英语工作日和月份名称,而且还避免了如果用户更改了设备上的12/24小时时间设置的问题。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49635068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档