日期格式化程序 字符串中的日期在 iPhone 日期和时间 24 小时时间关闭时返回 nil



我正在开发一个应用程序,该应用程序根据后端返回的字符串初始化日期。dateString使用以下格式返回:"2020-03-05T09:00:00+000:00">

我必须进行转换的方法是:

extension Date {
static func convertDate(_ dateString: String?) -> Date? {
guard let dateString = dateString else { return nil }
let dateFormatter = DateFormatter()
dateFormatter.setLocalizedDateFormatFromTemplate("yyyy-MM-dd'T'HH:mm:ssZZZZZ")
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
return dateFormatter.date(from: dateString)
}
}

一切都很好,直到有人报告说,如果用户在设置中关闭"24小时时间">,上述方法将返回零。

我做错了什么?

谢谢

您使用的是非常标准化的时间戳格式,它允许您利用ISO8601DateFormatter

let dateString = "2020-03-05T09:00:00+00:00"
let df = ISO8601DateFormatter()
df.formatOptions = [.withInternetDateTime]
if let date = df.date(from: dateString) {
print(date) // 2020-03-05 09:00:00 +0000
}

如果一台机器(比如你的服务器(正在生成时间戳,那么它将(应该(总是在祖鲁时间(GMT(,所以你不需要做任何超出这个时间戳的事情。你可以指定一个时区,但没有一个点,因为字符串总是为你清零。

df.timeZone = TimeZone(secondsFromGMT: 0)

此字符串表示时间中的绝对时刻。如果你需要一个相对的时间时刻,比如来源的当地时间,你需要确定这个时区并在这里应用它,这也是非常严格的。

最新更新