2011-07-18 25 views
7

私はいくつかのWebサービスと通信するアプリケーションを作成しています。変数がサーバー上で更新されると、更新日時を知らせるUNIXのタイムスタンプが返されます。私はそれを使用して比較することができます:[[NSDate date] timeIntervalSince1970]は1時間遅れているようです

[[NSDate date]timeIntervalSince1970] 

物事を同期させてください。

iPhoneのシステム時刻は正しいです。しかし、UNIXの時間はサーバーの1時間後(時計に表示されているようにシステム時間)のようです。なぜこうなった?タイムゾーンを設定する必要はありますか?

答えて

12

timeIntervalSince1970を返すように定義される:

受信機と基準日の間隔、1月1日 1970、GMT。

1970年1月1日から他のタイムゾーンで定義されている時間と比較できますか?その場合は、timeIntervalSince1970ではなくtimeIntervalSinceDate:を使用し、おそらくNSDateのdateByAddingTimeInterval:を使用して、GMTの参照日付から理想的な時間帯の参照日付に移動してください。

ハードコードしたくない場合は、NSTimeZoneのsecondsFromGMTForDate:プロパティを使用できます。

+1

私はあなたがそれを持っていると思います。この問題はタイムゾーンに関連しているようです。私は、GMTにNSDateFormatterを設定しようとし、timeIntervalSinceDateを使用しました:1970年1月1日を指していて、正しく動作するようです - ありがとう! – MikeT

1

あなたの質問から理解できるように、問題はサーバーによって返されたタイムスタンプにあります。実際の質問は、あなたがそのサーバーにアクセスできるかどうかです。それとも、タイムゾーンが何であるかを知っていますか?最初の場合は、サーバーの時刻を更新します。 2番目 - 時間帯の違いを計算して(1時間だと言って)、NSDateインスタンスに追加します。 NSCalendarは-(void)setTimeZone:(NSTimeZone *)timezone;メソッドを使用している場合もあります(必要に応じてオーバーヘッドになる可能性があります)。

+1

私は以前にsetTimeZoneを使っていましたが、足りない部分はtimeIntervalSinceDate:timeIntervalSince1970ではなく、問題を修正したようです。あなたのご意見ありがとうございます! – MikeT

関連する問題