首页 > 解决方案 > Swift - 从 ISO8601 日期字符串中检索时区

问题描述

我将日期以这种格式保存在数据库中 - “yyyy-MM-dd'T'HH:mm:ssZ”。例如,“2018-05-17T11:15:00+0330”。时区各不相同,它位于用户的本地时区。

我想检索并显示“2018 年 5 月 17 日 11.15AM”之类的日期,将日期/时间保持在与保存时相同的时区。我怎样才能做到这一点?

我试过这个。

let dateString = "2018-05-17T11:15:00+0330"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ"
//formatter.timeZone = ???
print(formatter.date(from: dateString))

但是我在本地时区获得了 Date 对象,并将其转换为日期字符串也会显示我本地时区的日期。

在 Swift 中有这样的东西吗,https ://stackoverflow.com/a/46216251/1373592?

谢谢。

标签: swift

解决方案


你真正想做的是忽略时区。

您可以从日期字符串中去掉最后 5 个字符,以一种格式对其进行解析,然后以另一种格式对其进行格式化:

let dateString = "2018-05-17T11:15:00+0330"
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let date = formatter.date(from: String(dateString.dropLast(5)))! // note the stripping off here
formatter.dateFormat = "MMMM d, yyyy hh.mma"
print(formatter.string(from: date))

请注意,您无法将此日期与其他日期进行比较,因为您已经剥离了它的时区。

此外,SwiftDate是一个类似于 JodaTime 的库。


推荐阅读