0

ISO 8601 形式でサーバーから日付を取得しています。日付は、特定の番組の特定のエピソードが放送される時間を表します。日付の例を次に示します。

"2013-07-30T21:00:00-05:00"

それは 2013 年 7 月 30 日午後 9 時(EST)です。EST は -05:00 です。問題は、日付をユーザー (この場合は自分自身) に表示しようとすると発生します。私は現在中部時間にいますが、サマータイムが有効です。つまり、iOS は、私が現在中部夏時間であり、これも -05:00 (通常の CST は -06:00) であると言っています。

この番組は、私の CST タイム ゾーンで午後 8 時に放送されます。サマータイムがオンかオフかは関係ありません。時計が午後 8:00 に達すると、番組は常に放送されます。通常、夏時間ではない場合、iOS は -05:00 から -06:00 に移動するため、適切な変換を行うことができます。-05:00 を元のオフセットとして認識し、-05:00 を現在のオフセットとして認識しますが、現在は夏時間になっているため、変換は行われず、午後 9:00 から始まる番組が表示されます。これに対処する方法はありますか?

4

1 に答える 1

0

残念ながら、中部時間や東部時間などの実際のタイム ゾーンに戻すなど、タイム ゾーン オフセットだけをマッピングする方法はありません。ご指摘のとおり、中央夏時間または東部標準時間の可能性があります。ただし、ある時点または別の時点でたまたまオフセットを使用するのは、任意の数の他のタイム ゾーンである可能性があります。このタイム ゾーンのリストを参照し、オフセット列の 1 つで並べ替えて、それらがいくつあるかを把握してください。こちらもご覧ください-05:00-05:00

幸いなことに、日付/時刻という別の情報があります。したがって、これを使用して、これらのゾーンの一部を部分的に区別できます。データが米国であることが確実にわかっている場合は、あいまいさをさらに制限できる場合もあります。

ただし、まだ 1 つの問題があります。のような時間2013-11-03T01:00:00-05:00は、実際にはCDT と ESTの両方に同時にあります! それはどうしてですか?アメリカでは、全員が同時に時計を変えるわけではありません。各タイムゾーンは、独自の現地時間で午前 2 時に変更されます。したがって、東部時間はすでにフォールバック移行に遭遇しているが、中部時間はまだ移行していない時間が毎年 1 時間あります。

これらすべてに対処する唯一の実際の方法は、完全な IANA タイム ゾーン (America/New_York東部またはAmerica/Chicago中部など) など、その他のコンテキスト情報を保存することです。または、単に表示する場合は、文字列を保存できます。選択したタイムゾーンの略語 (EST、CDT など) を使用します。

timezone tag wiki の「Time Zone != Offset」も参照してください。

于 2013-09-07T18:35:55.947 に答える