【发布时间】:2020-03-05 16:30:30
【问题描述】:
我正在开发一个从后端返回的字符串初始化日期的应用程序。使用以下格式返回 dateString:"2020-03-05T09:00:00+00: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 小时制”,上述方法将返回 nil。
我做错了什么?
谢谢
【问题讨论】:
-
嗨,我尝试运行此代码,但在“dateFormatter.setLocalizedDateFormatFromTemplate(Date.dateFormatterLocale)”行出现错误,特别是 dateFormatterLocale 不是 Date 的成员。这是你在别处创造的东西吗?我试图将其更改为 dateFormatter.locale 但这又给出了另一个错误。
-
您需要将 dateFormatter 语言环境设置为“en_US_POSIX”。 使用固定格式日期时,例如 RFC 3339,您可以设置 dateFormat 属性来指定格式字符串。对于大多数固定格式,您还应该将 locale 属性设置为 POSIX 语言环境(“en_US_POSIX”),并将 timeZone 属性设置为 UTC。 developer.apple.com/documentation/foundation/dateformatter
-
对不起,你是对的。这是一个常数......
-
删除
dateFormatter.setLocalizedDateFormatFromTemplate。你不需要它 -
如果您还从日期创建时间戳,则应将时区设置为 UTC
标签: swift