【问题标题】:Swift unable to parse string date to Date objectSwift 无法将字符串日期解析为 Date 对象
【发布时间】:2016-10-05 08:23:12
【问题描述】:

我的日期格式如下:

2016-08-26T05:16:50.200Z

我正在尝试将类似的日期格式字符串解析为 Swift 3.0 中的 Date 对象。

这是我的努力:

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-mm-dd EEEEE HH:mm:ss Z"
formatter.locale = Locale(identifier: "us")

var date = formatter.date(from: date_str)!

date_str 是上面提到的格式。 不幸的是,swift 无法识别格式并返回 nil。

注意:我不想更改字符串以匹配格式化程序,而是使格式化程序适应字符串的格式。字符串是外部源的,所以我没有能力改变字符串的格式,但坚持使用它并创建一个可以识别字符串日期模式的格式化程序。

关于我的格式错误的任何想法?

【问题讨论】:

  • 也许是个愚蠢的问题,但是您是否尝试过删除空格以使字符串与格式完全匹配? "yyyy-mm-dd EEEEE HH:mm:ss Z" -> "yyyy-mm-ddEEEEEHH:mm:ssZ"
  • @ZassX 谢谢。我想我已经尝试过了,但不是最后的 Z。让我试试。
  • @ZassX 不,那没有用。老实说,当我阅读有关格式化程序可能值的文档时,Z 不可用,我也不知道这在现实世界日期中意味着什么。
  • 我尝试过使用在线格式化程序。这对我来说没问题,但这意味着日期字符串有点不同:2016-08-26T05:16:50-0200 我认为字符串中的 Z 不应该存在。也请自行检查:nsdateformatter.com

标签: swift date nsdate swift3 nsdateformatter


【解决方案1】:

您在这里犯了错误,这里T 不是周详细信息,T 只是时间部分开始的标记。

可以通过连接完整的日期表达式、作为分隔符的字母 T 和有效的时间表达式来表示单个时间点。例如“2016-10-05T14:30”。

所以现在只需将您的dateFomat 更改为yyyy-MM-dd'T'HH:mm:ss.SSSZ,您将获得所需的正确日期。

let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
formatter.locale = Locale(identifier: "us")
var date = formatter.date(from: date_str)!
print(date)

输出:

【讨论】:

  • 欢迎朋友 :)
猜你喜欢
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多