2011-07-18 29 views
7

我在寫一個與某些Web服務通信的應用程序。當服務器上的變量被更新時,它會返回一個unix時間戳來告訴我它何時更新。然後我可以使用它進行比較:[[NSDate date] timeIntervalSince1970]似乎是後面的1小時

[[NSDate date]timeIntervalSince1970] 

保持同步。

iPhone上的系統時間是正確的。但unix時間似乎比服務器晚了1小時(系統時間如圖所示)。這是爲什麼發生?我需要設置時區嗎?

回答

12

timeIntervalSince1970定義爲返回:

在接收器和基準日期之間的時間間隔,1月1日1970年 ,GMT。

是否有可能將您的某個時間定義爲1970年1月1日以後的某個其他時區?如果是這樣,最簡單的方法是使用timeIntervalSinceDate:而不是timeIntervalSince1970,可能已使用NSDate的dateByAddingTimeInterval:從GMT中的參考日期移至理想時區中的參考日期。

如果你不想硬編碼的東西,你可以使用NSTimeZone的secondsFromGMTForDate:屬性。

+1

我想你明白了。這個問題似乎與時區有關。我試圖將NSDateFormatter設置爲GMT,然後使用timeIntervalSinceDate:指向1970年1月1日,它似乎正常工作 - 謝謝! – MikeT

1

從您的問題可以理解,問題在於服務器返回的時間戳。所以真正的問題是如果你有訪問該服務器。或者你知道它在什麼時區。如果首先更新服務器上的時間。其次 - 計算時區之間的區別(您說它是一個小時)並將其添加到您的NSDate實例。 你也可以使用NSCalendar,因爲它有-(void)setTimeZone:(NSTimeZone *)timezone;方法。(可能是你的需求開銷)

+1

我之前使用過setTimeZone,但是缺失的部分似乎是timeIntervalSinceDate:而不是timeIntervalSince1970修復了問題。感謝您的輸入! – MikeT

相關問題