extension Formatter {
static let iso8601: DateFormatter = {
let formatter = DateFormatter()
formatter.calendar = Calendar(identifier: .iso8601)
formatter.timeZone = TimeZone.init(identifier: "America/New_York")
formatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
return formatter
}()
}
extension Date {
var iso8601: String {
return Formatter.iso8601.string(from: self)
}
}
extension String {
var dateFromISO8601: Date? {
return Formatter.iso8601.date(from: self) // "Mar 22, 2017, 10:22 AM"
}
}
let dateFormat:String = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
let strDate: String = "2017-10-09T00:00:00.966Z"
if let dateFromString = strDate.dateFromISO8601
{
print(dateFromString.iso8601)
}
好了,所以它不会做与dateFormatter.date(来源:sweDate)什么)呢!? 如何获取日期字符串值?斯威夫特日期时区问题
根据我所知,日期不存储时区,因此它总是打印UTC时间,不管我在格式化时使用了哪个时区。
那么什么是解决方案,因为我必须将我的本地日期与转换日期进行比较。我无法与字符串进行比较。 任何帮助表示赞赏。
“YYYY-MM-dd'T'HH:MM:ss.SSS'Z'原”是错的。通过转义Z,它不会考虑日期字符串中的时区。 Z表示UTC。如果你转义Z,它会将你的日期字符串解释为本地时间,这是错误的 –
你可以设置一个不同的时区,但是当用包含时区的日期格式解析你的日期时也不会有什么区别。“”yyyy- MM-dd'T'HH:mm:ss.SSSZ“'检查此https://stackoverflow.com/a/28016692/2303865。您可以使用TimeZone将日期转换为具有特定语言环境的字符串。 –
@LeoDabus我认为这是没有问题的Z即使我逃脱Z它仍然输出错误的日期 –