我从天气API获得了一些结果,其中一个是在纪元时间戳中的日期。
我发现转换为Date(timeIntervalSince1970:)
我得到了正确的日期
我使用的是具体号码 - > 1501452000
我在Playground上获得了2个结果
1)Jul 31,2017,12:00AM
。 - 当 - > let date = Date(timeIntervalSince1970: 1501452000)
2)2017-07-30 22:00:00 +0000
当 - > print(date)
API结果是:
"time_epoch": 1501452000,
"time": "2017-07-30 23:00",
通过检查结果的其余部分,它们与API结果的其余部分匹配.......但是当我转换1501452000
- >到目前为止,我没有得到正确的小时23:00但是22:00!
知道发生了什么事吗? 这是错误的API(我不这么认为)或我转换它的方式?
非常感谢
答案 0 :(得分:0)
timeIntervalSince1970
初始化程序会设置UTC时区的时间,而您的API可能会在GMT中发送date
秒。当您使用print(data)
时,您会得到不同的结果,因为如果您没有使用DateFormatter
生成String
对象的Date
格式,那么它会将您的设备用于当前格式化Date
对象时的设置。
Date
对象表示绝对时间点,但是当您使用DateFormatter
打印时,它会转换为特定于位置/时区的相对表示。您只需设置DateFormatter
以匹配API的时区设置,您就会看到正确打印的日期。
答案 1 :(得分:0)
此问题发生在夏令时。您的国家/地区是否在此确切日期更改了夏令时?
答案 2 :(得分:0)
let date = Date(timeIntervalSince1970: 1501452000)
会给您系统时区的时间。
当您打印并查看2017-07-30 22:00:00 +0000
时 - 这与GMT中的时间戳相同
API是否显示特定时区?它看起来像GMT + 1