タイムゾーン対応スケジューリング — 信頼性の高いスケジューラーの構築
DST遷移、定期イベント、タイムゾーン間の調整を正しく処理するタイムゾーン対応スケジューリングシステムの構築方法。
Development
詳細な説明
タイムゾーン対応スケジューリング
信頼性の高いスケジューリングシステムを構築するには、慎重なタイムゾーン処理が必要です。「ニューヨーク時間の午前10:00」の会議は、ニューヨークがESTでもEDTでも正しく機能する必要があります。
核心的な問題
定期的な会議を考えます:「毎週月曜日の東部時間午前10:00」
冬(EST):午前10:00 = 15:00 UTC
夏(EDT):午前10:00 = 14:00 UTC
「毎週月曜日15:00 UTC」として保存すると、夏の間は現地時間午前11:00になります。代わりに以下のように保存します:
{
"recurrence": "FREQ=WEEKLY;BYDAY=MO",
"localTime": "10:00",
"timezone": "America/New_York"
}
一回限りのイベント vs 定期イベント
一回限りのイベントはUTCとして保存すべきです。 定期イベントはローカル時間 + タイムゾーンを保存すべきです。
DST遷移の処理
定期イベントがDST遷移中に該当する場合:
春に進む(ギャップ): イベントが午前2:30で、時計が午前2:00から午前3:00にスキップする場合
- オプションA:午前3:00に実行(ギャップ後の最初の有効な時間)— 最も一般的
- オプションB:その回をスキップ — 最も安全
秋に戻る(オーバーラップ): イベントが午前1:30で、午前1:00-2:00が繰り返される場合
- オプションA:最初の発生で実行(フォールバック前)— 最も一般的
- オプションB:2回目の発生で実行(フォールバック後)
タイムゾーン間の調整
複数のタイムゾーンが関わるイベントでは、「アンカー」タイムゾーンを保存して他を計算します。注意:米国とEUは異なる日付にDSTを切り替えるため、通常のオフセットが変わる2-3週間の期間があります。
ユースケース
タイムゾーン対応スケジューリングは、カレンダーアプリケーション(Google Calendar、Outlook)、ジョブスケジューラー(cron、Airflow、AWS EventBridge)、会議調整ツール(Calendly、Doodle)、リマインダーシステム、自動レポート生成、特定のローカル時間ウィンドウ内で実行する必要があるデプロイメントパイプラインにとって不可欠です。