Date(timeIntervalSince1970 :)返回2个不同的结果

时间:2017-07-30 21:49:48

标签: ios swift date epoch

我从天气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(我不这么认为)或我转换它的方式?

非常感谢

3 个答案:

答案 0 :(得分:0)

timeIntervalSince1970初始化程序会设置UTC时区的时间,而您的API可能会在GMT中发送date秒。当您使用print(data)时,您会得到不同的结果,因为如果您没有使用DateFormatter生成String对象的Date格式,那么它会将您的设备用于当前格式化Date对象时的设置。

Date对象表示绝对时间点,但是当您使用DateFormatter打印时,它会转换为特定于位置/时区的相对表示。您只需设置DateFormatter以匹配API的时区设置,您就会看到正确打印的日期。

答案 1 :(得分:0)

此问题发生在夏令时。您的国家/地区是否在此确切日期更改了夏令时?

答案 2 :(得分:0)

    当您在右侧看到它时,Playgrounds中的
  1. let date = Date(timeIntervalSince1970: 1501452000)会给您系统时区的时间。

  2. 当您打印并查看2017-07-30 22:00:00 +0000时 - 这与GMT中的时间戳相同

  3. API是否显示特定时区?它看起来像GMT + 1