我在寫一個與某些Web服務通信的應用程序。當服務器上的變量被更新時,它會返回一個unix時間戳來告訴我它何時更新。然後我可以使用它進行比較:[[NSDate date] timeIntervalSince1970]似乎是後面的1小時
[[NSDate date]timeIntervalSince1970]
保持同步。
iPhone上的系統時間是正確的。但unix時間似乎比服務器晚了1小時(系統時間如圖所示)。這是爲什麼發生?我需要設置時區嗎?
我在寫一個與某些Web服務通信的應用程序。當服務器上的變量被更新時,它會返回一個unix時間戳來告訴我它何時更新。然後我可以使用它進行比較:[[NSDate date] timeIntervalSince1970]似乎是後面的1小時
[[NSDate date]timeIntervalSince1970]
保持同步。
iPhone上的系統時間是正確的。但unix時間似乎比服務器晚了1小時(系統時間如圖所示)。這是爲什麼發生?我需要設置時區嗎?
timeIntervalSince1970
定義爲返回:
在接收器和基準日期之間的時間間隔,1月1日1970年 ,GMT。
是否有可能將您的某個時間定義爲1970年1月1日以後的某個其他時區?如果是這樣,最簡單的方法是使用timeIntervalSinceDate:
而不是timeIntervalSince1970
,可能已使用NSDate的dateByAddingTimeInterval:
從GMT中的參考日期移至理想時區中的參考日期。
如果你不想硬編碼的東西,你可以使用NSTimeZone的secondsFromGMTForDate:
屬性。
從您的問題可以理解,問題在於服務器返回的時間戳。所以真正的問題是如果你有訪問該服務器。或者你知道它在什麼時區。如果首先更新服務器上的時間。其次 - 計算時區之間的區別(您說它是一個小時)並將其添加到您的NSDate實例。 你也可以使用NSCalendar,因爲它有-(void)setTimeZone:(NSTimeZone *)timezone;
方法。(可能是你的需求開銷)
我之前使用過setTimeZone,但是缺失的部分似乎是timeIntervalSinceDate:而不是timeIntervalSince1970修復了問題。感謝您的輸入! – MikeT
我想你明白了。這個問題似乎與時區有關。我試圖將NSDateFormatter設置爲GMT,然後使用timeIntervalSinceDate:指向1970年1月1日,它似乎正常工作 - 謝謝! – MikeT