コンテンツへスキップ
uencoder

タイムゾーンを正しく変換する

タイムゾーン変換は、夏時間、略称、政治的な変更があるため注意が必要です。IANA タイムゾーン名と Instant/ZonedDateTime パターンの使い方を学びましょう。

  1. 1

    ベストプラクティス:(1) タイムスタンプは UTC で保存する。(2) IANA タイムゾーン名を使う(America/New_York。EST/EDT などの略称は曖昧)。(3) ローカル時刻への変換は表示時のみ行う。(4) IANA タイムゾーンをサポートするライブラリ(date-fns-tz、Luxon、js-joda)を使う。(5) タイムゾーン計算に Date を使わない(JavaScript の Date はタイムゾーンの扱いが壊れている)。(6) 夏時間(DST)の移行に注意(春は午前 2 時が 3 時になり、秋は午前 2 時が 2 回発生する)。

  2. 2
    タイムゾーンコンバーター →

    タイムスタンプをあるタイムゾーンから別のタイムゾーンに変換します。変換元と変換先の IANA タイムゾーン名を指定します(例:America/New_York から Asia/Tokyo へ)。ツールは夏時間の移行を正しく処理します。略称ではなく常に IANA 名を使ってください(EST は米国東部でもオーストラリア東部でもあり得ます)。

  3. 3
    タイムスタンプコンバーター →

    現在の UTC タイムスタンプを取得します。これをデータベース、API、ログに保存してください。UTC は普遍的で、夏時間も政治的な変更もありません。ローカル時刻への変換はプレゼンテーション層のみで行います。保存と交換には ISO 8601 形式(2024-01-15T10:30:00Z)を使ってください。

  4. 4
    日付計算ツール →

    タイムゾーンをまたぐ日付差を計算します。注意:UTC で「1 日追加」しても、ローカル時刻では夏時間の境界を跨ぎ、23 時間や 25 時間になることがあります。意図がカレンダーベースなら日付単位の演算(日を足す)、期間ベースなら時間単位の演算(時間を足す)を使ってください。

よくある質問

なぜタイムゾーンの略称は曖昧なのですか?
EST は米国東部標準時(UTC-5)でもオーストラリア東部標準時(UTC+10)でもあります。CST は米国中部、中国標準、キューバ標準時です。IANA 名(America/New_York、Asia/Shanghai)は曖昧さがありません。保存と計算には常に IANA 名を使い、略称は表示にのみ使ってください。
夏時間の移行はどう扱えばよいですか?
春のサマータイム開始では午前 2 時が 3 時になり、2 時〜3 時の間の時刻は存在しません。秋の終了では午前 2 時が 1 時になり、1 時〜2 時の間の時刻は 2 回発生します。スケジューリングには UTC を使って曖昧さを避けてください。表示では、優れたライブラリが移行前後のどちらを指すか示してくれます。午前 2 時 30 分にイベントをスケジュールしないでください。存在しないか曖昧な場合があります。

このタスクを解決するワークフロー

関連ツール