【发布时间】:2020-03-29 17:58:56
【问题描述】:
我目前正在尝试调用 Api,然后它会返回一些信息以及更改日期。之后我想以“dd.MM.yyyy”格式显示日期。我从 Api 获得的日期如下所示:“2020-03-20T19:30:00”。因此,我在这个问题中使用了解决方案:How to get time from YYYY-MM-dd'T'HH:mm:ss.sssZ 使其看起来像我想要的格式。
不幸的是,当我尝试解析从 Api 获得的日期时,我总是得到一个 nil 值。
我写的代码如下:
let inputFormatter : DateFormatter = DateFormatter()
inputFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss"
let dateFormatter : DateFormatter = DateFormatter()
dateFormatter.dateFormat = "dd.MM.yyyy"
//date is always nil
let date = inputFormatter.date(from: content?.DateTime ?? "2020-03-20T19:30:00")
dateLabel.text = dateFormatter.string(from: date ?? Date())
有人知道为什么我总是得到一个 nil 值,以及我转换日期的方式是好还是坏?
【问题讨论】:
-
是的,将
inputFormatter的locale设置为en_US_POSIX是个好主意。或者,更好的是使用ISO8601DateFormatter,它会处理所有这些,而不是DateFormatter,然后您就不必设置locale或dateFormat。 -
@Rob ISO8601DateFormatter 在最后没有时区
Z将无法工作 -
正如 Rob 刚才提到的,根据用户的设备区域设置和设置显示您的日期stackoverflow.com/questions/28332946/…
-
@LeoDabus 当然。但它是适用于 iOS 11 及更高版本的工作的正确工具。
-
顺便说一句,在没有时区限定符的情况下,有点不清楚这代表什么时区(例如,格林威治标准时间晚上 7:30,本地时间晚上 7:30,服务器时区的晚上 7:30?)。根据定义,ISO8601 字符串假定在没有时区限定符的情况下(例如,
Z),它位于您的本地时区。但大多数 Web 服务通常以 GMT/UTC/Zulu 报告日期字符串。您可能想要准确地确认您的 Web 服务在做什么。如果这是您自己的 Web 服务,您可能会考虑转而使用带有时区信息的完全合格的 ISO 8601/RFC 3339 日期字符串。