swift - 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?
谢谢。
解决方案
你真正想做的是忽略时区。
您可以从日期字符串中去掉最后 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 的库。
推荐阅读
- javascript - 需要使用id多次显示数据属性结果,有没有其他方法可以实现这个结果?
- sqlite - 如何使用 PHP 将图像文件读入 SQLITE 数据库
- python - 将excel文件中的数据保存到一个没有索引的变量中
- angular - 将带有离子样式的html页面存储在内存中
- python - 熊猫识别一列中具有匹配值的记录但另一列中没有匹配值
- jekyll - Jekyll Serve 参数错误“选项名称 hard_wrap 已被使用”
- haskell - 同构对的单子实例的已知/已建立用例
- amazon-web-services - 将 ECR 配置为从 Docker Hub 拉取的代理
- r - 在 R 中使用 map() 到“spread_predictions”时继续识别特征?
- soap - 无法在 Salesforce 上使用元数据 API 创建列表视图