2017-07-30 251 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」 –