initwithtimeIntervalで間違った日付を取得:sincedate:
-
30-09-2019 - |
質問
私は日付があります、 2010-08-23 13:30:00 -0400
そして、私はそれをUTC +2タイムゾーンで取得しようとしています。秒の違いは21600ですが、私が電話するとき [[NSDate alloc] initWithTimeInterval:interval sinceDate:sourceDate];
, 、私は得ます 2010-08-24 01:30:00 +0200
それはそうあるべきです 2010-08-23 19:30:00 +0200
. 。私が何をしているのか考えてみませんか?
解決
日付オブジェクトは、その時点でさまざまな人々の時計が言ったかもしれないことに関係なく、特定の瞬間を表します。
通常、ユーザーの時計が言っていた(または言っている、または発言する)ことを表示するため、日付を表示するとタイムゾーンが関与します。これはまさにあなたが起こったときに起こることです NSLog
NSDATE:日付の説明は、現地の時刻ゾーンでその時間の瞬間を表すことです。
NSDATEに追加または減算することは、タイムゾーン変換ではありません。追加および減算は、表すNSDatesを生成します 他の 瞬間;あなたの場合、あなたはあなたが始めた瞬間から6時間後にしばらくNSDateを作成しています、 いいえ 惑星の反対側の同じ瞬間。
単純化するために、タイムゾーンの変換が見ています 同時に の 空間のさまざまなポイント (惑星の表面の異なるセクション)、日付の追加と減算は 異なる時間を計算します.
NSDateのタイムゾーン変換はありません。これは、最初からタイムゾーンにないためです。タイムゾーンの日付をフォーマットすると、タイムゾーンが関与します。したがって、その日付を他のタイムゾーンに表示するには、それを行うだけです。通常、これはあなたに望ましいタイムゾーンを供給することを意味します 日付フォーマッタ.
他のヒント
あなたが戻ってきた日付は別のタイムゾーンを持っていることがわかります +200
いいえ -400
. 。気付いた場合、その結果は元の日付よりもちょうど12時間(または6時間 + 6時間)であることがわかります。新しい日付を作成したときに、偶然にもロケールを変更しましたか?あなたがあなたに与え始めた変更をしたとき +200
それ以外の -400
システムは自動的に補償の時間を調整し、その後、日付にさらに6時間を追加しました。 NSDATEは、2001年1月1日以降、すべての日付を時間間隔として保存し、必要に応じてタイムゾーンを調整します。