Skip to content

DST境界日でのオフセット計算がローカル時間ではなくUTC時間基準になっている #5

Description

@narutiga

現在の動作

オフセット計算に new Date(Date.UTC(year, month - 1, day, hour)) を使用しています。これはユーザーが選択したローカル時間と同じ時刻コンポーネントを持つUTCインスタントを表します。

問題

DST(夏時間)境界付近では、そのUTCインスタントでのオフセットが、意図したローカル時間でのオフセットと異なる場合があります。

具体例

春の切り替え日(例:3月第2日曜日)に「3:00」を選択した場合:

  • UTC基準で取得したオフセットは切り替え前の値になる可能性がある
  • 結果として、Discord タイムスタンプが1時間ずれる

影響範囲

  • DST境界日のみ(年2回)
  • 切り替え時刻前後の数時間

現在の緩和策

  • サーバーTZ依存は Date.UTC() で排除済み
  • コメントでこの制限を文書化済み
  • このBotは「だいたいの時間」を示すもので、厳密なスケジューリング用途ではない

将来的な解決策

  1. 反復的アプローチ: 概算UTC → オフセット取得 → 再計算 → 収束確認
  2. ライブラリ使用: date-fns-tzluxon で正確な変換
  3. Temporal API: Node.jsで広く利用可能になったら採用

関連

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions