格式化日期时的奇怪行为
Curious behavior while formatting dates
我从 json 中获取日期的字符串表示形式,如下所示:
let dateString = "2016-12-31T00:10:00+01:00"
为了将其建模为 Date 对象,我使用了日期格式化程序,如下所示:
let dateForm = DateFormatter()
dateForm.locale = Locale(identifier: "fr_FR")
dateForm.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateForm.timeZone = TimeZone.current
当我把它变成日期时,我的 Playground 输出是正确的:
let date = dateForm.date(from: dateString)
=> 输出:"Dec 31, 2016, 12:10 AM"
但是如果我尝试打印这个完全相同的对象(日期),我会得到以下输出:
print(date!)
=> 输出:“2016-12-30 23:10:00 +0000\n”
我的问题是:我如何确定我正在处理正确的日期(正确是指我的本地时区 (GMT+01))?
当您打印日期输出 2016-12-30 23:10:00 +0000
并且您的 GMT 是 +00:00
但是当你从日期获取字符串时,它将 return 字符串按照你给定的格式和你的 Locale
(fr_FR) 输出 2016-12-31T00:10:00+01:00
而你的 GMT 是 +01:00
如果你想从字符串中约会,那么
日期输出 = 您的字符串日期 -(您的 GMT)
你的情况
2016-12-30 23:10:00 = 2016-12-31 00:10:00 - (+01:00)
我从 json 中获取日期的字符串表示形式,如下所示:
let dateString = "2016-12-31T00:10:00+01:00"
为了将其建模为 Date 对象,我使用了日期格式化程序,如下所示:
let dateForm = DateFormatter()
dateForm.locale = Locale(identifier: "fr_FR")
dateForm.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ"
dateForm.timeZone = TimeZone.current
当我把它变成日期时,我的 Playground 输出是正确的:
let date = dateForm.date(from: dateString)
=> 输出:"Dec 31, 2016, 12:10 AM"
但是如果我尝试打印这个完全相同的对象(日期),我会得到以下输出:
print(date!)
=> 输出:“2016-12-30 23:10:00 +0000\n”
我的问题是:我如何确定我正在处理正确的日期(正确是指我的本地时区 (GMT+01))?
当您打印日期输出 2016-12-30 23:10:00 +0000
并且您的 GMT 是 +00:00
但是当你从日期获取字符串时,它将 return 字符串按照你给定的格式和你的 Locale
(fr_FR) 输出 2016-12-31T00:10:00+01:00
而你的 GMT 是 +01:00
如果你想从字符串中约会,那么
日期输出 = 您的字符串日期 -(您的 GMT)
你的情况
2016-12-30 23:10:00 = 2016-12-31 00:10:00 - (+01:00)