2017-07-30 253 views
1

我从天气API获得一些结果,其中之一是日期时间戳记。Date(timeIntervalSince1970 :)返回2个不同的结果

我发现,Date(timeIntervalSince1970:)转换我得到正确的日期

我使用的具体数字 - >1501452000和我得到的游乐场

1)Jul 31,2017,12:00AM 2分的结果。 - 当 - >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

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

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

+0

感谢您的快速回复。有效。正如你所说的API时间戳是在格林尼治标准时间,所以我不得不做一个Dateformatter和它的工作。 –

+0

很高兴我能帮到你。如果您发现我的答案有用,请考虑对其进行提升。 –

+1

我试过大卫,但因为我是新用户,所以我只有不到15的声望!!!!!所以我会的时候我会有15.该死的尴尬hehehe !!!有一个伟大的 –

0

夏令时发生此问题。贵国是否正在改变夏令时?

0
  1. let date = Date(timeIntervalSince1970: 1501452000)在操场应该给你的时间在你的系统的时区,当你看到它在右边。

  2. 当你打印出来,看看2017-07-30 22:00:00 +0000 - 这是在格林尼治标准时间

相同的时间戳是API呈现出特定的时区?它看起来像是GMT + 1

+0

我能从API获得的唯一一件事是“日期”:“Sun,2017年7月30日21:38:24 GMT” –

+0

在你的问题中你说:API结果是:“time_epoch”:1501452000, “时间”:“2017-07-30 23:00” –