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

Date(timeIntervalSince1970:) returns 2 different results

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

非常感谢

timeIntervalSince1970 初始化程序设置 UTC 时区的时间,而您的 API 可能发送 date 格林威治标准时间。当您使用 print(data) 时,您会得到不同的结果,因为如果您没有使用 DateFormatter 来生成 Date 对象的 String 格式,它会使用您的设备当前格式化 Date 对象时的设置。

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

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

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

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

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