来自字符串的 Swift DateFormatter 日期在 NSDateFormatter 曾经工作的地方失败

Posted

技术标签:

【中文标题】来自字符串的 Swift DateFormatter 日期在 NSDateFormatter 曾经工作的地方失败【英文标题】:Swift DateFormatter date from string fails where NSDateFormatter used to work 【发布时间】:2019-11-20 10:24:26 【问题描述】:

我有一个日期字符串:"2017-09-27T13:03:47.86+00:00" 和 dateFormat:"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZZ" 用于 NSDateFormatter但返回 nil 与 DateFormatter.date(string: )

有什么想法可以与 swift DateFormatter 一起使用吗?

【问题讨论】:

好吧,你应该从修复格式开始。你看到你期望的毫秒位数和它们的实际数量了吗? 把你的 dateString 写在你的日期格式上面,看起来正确吗?为什么有这么多“S”?为什么有这么多“Z”?规范说了什么:多少,哪个字母与期望:unicode.org/reports/tr35/tr35-31/…? @Larme ZZZZZ 格式正确。 【参考方案1】:

如果您将语言环境设置为en_US_POSIX,格式字符串应该可以工作,但是 2 个S 就足够了

formatter.locale = Locale(identifier: "en_US_POSIX")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSZZZZZ"

不过我建议使用专用的ISO8601DateFormatter

let dateString = "2017-09-27T13:03:47.86+00:00"
let formatter = ISO8601DateFormatter()
formatter.formatOptions = [.withInternetDateTime, .withFractionalSeconds]
let date = formatter.date(from: dateString)

【讨论】:

Dateformatter 对我来说太慢了。我不知道这个 ISO8601 版本。它是一个很好的选择。

以上是关于来自字符串的 Swift DateFormatter 日期在 NSDateFormatter 曾经工作的地方失败的主要内容,如果未能解决你的问题,请参考以下文章

来自网络请求 JSON 的 Swift 字符串有换行符 - 如何删除换行符?

来自字符串的 Swift DateFormatter 日期在 NSDateFormatter 曾经工作的地方失败

来自html字符串的iOS Swift 4图像未在WKWebView中加载

如何大写来自 Swift 子类的 UILabel 的文本属性

来自 URL 的 Youtube 视频 ID - Swift3

快速日期格式化