夏時間(DST)— ソフトウェアとスケジューリングへの影響

夏時間がソフトウェア、スケジューリング、タイムスタンプ計算にどのように影響するかを理解します。DST遷移のエッジケースとコードでの対処方法を学びます。

Fundamentals

詳細な説明

夏時間とソフトウェアへの影響

夏時間(DST)は、暖かい月に時計を1時間進めて夕方の日照時間を延長する慣行です。概念は単純ですが、ソフトウェアへの影響は驚くほど複雑です。

DSTはいつ発生するか?

DST遷移は国と半球によって異なります:

  • 北半球(米国、カナダ、EU):春に進む(3月/4月)、秋に戻る(10月/11月)
  • 南半球(オーストラリア、ブラジル):春に進む(9月/10月)、秋に戻る(3月/4月)
  • 多くの国はDSTを実施していない:日本、中国、インド、アフリカの大部分など

「春に進む」問題

時計が進むと、1時間がスキップされます。例えば、米国東部時間では午前2:00が午前3:00になります:

午前1:59 EST  →  (1分経過)  →  午前3:00 EDT

午前2:00から午前2:59の時間は、その日には存在しません。春に進む日の午前2:30にスケジュールされたイベントは失敗するか予期しない動作をします。

「秋に戻る」問題

時計が戻ると、1時間が繰り返されます:

午前1:59 EDT  →  (1分経過)  →  午前1:00 EST

午前1:00から午前1:59の時間は、その日に2回発生します。

よくあるバグ

  1. 期間計算:1日は常に24時間ではありません。DST遷移日は23時間または25時間です。
  2. 定期イベント:午前2:30の毎日の会議は春に進む日に壊れます。
  3. Cronジョブ30 2 * * *は春に1回スキップし、秋に2回実行されます。
  4. 日付演算:「1日」を加算する際にDSTを考慮する必要があります。

安全なプラクティス

  • タイムスタンプをUTCで保存 — ローカル時間を保存しない
  • IANAタイムゾーンIDを使用 — オフセットではなく
  • 実績のあるライブラリを使用 — Temporal API、Luxon、date-fns-tz、Joda-Time
  • DST遷移をテスト — 春に進む日と秋に戻る日のユニットテストを作成
  • 遷移時間帯のスケジューリングを避ける — 可能であれば午前3時から深夜までの間にスケジュール

ユースケース

DST対応は、スケジューリングアプリケーション、カレンダーシステム、アラーム時計、航空券予約システム、金融取引処理、およびDST遷移をまたぐ期間を計算するあらゆるシステムにとって重要です。1時間のエラーはフライトの逃し、不正な請求期間、Cronジョブの重複実行、またはSLAウィンドウの見逃しを意味する可能性があります。

Try It — Timezone Reference

フルツールを開く