レッスン 3
UTC、ローカル時刻、タイムゾーン
壁時計 vs instant、IANA ゾーン、夏時間のずれ。
Unix タイムスタンプは** instant** — グローバルタイムライン上の 1 点 — を識別します。UTC とローカル時刻は、人間向けにその instant をラベル付けする別の方法です。
UTC
協定世界時(UTC) は季節オフセットのない参照時間尺度です。ログが「すべて UTC」と言うとき、地域を跨ぐ比較にローカルルールの推測は不要です。
Z で終わる ISO 文字列は「Zulu」= UTC、例 2024-01-15T08:30:00Z。
ローカル壁時計
ノート PC の時計はローカル壁時計 — タイムゾーン内の市民時間、夏時間調整込み — を示します。同じタイムスタンプを見ても開発者 2 人は異なる時刻表記を書くことがあります。
Europe/Berlinの2024-07-01 09:00Asia/Shanghaiの2024-07-01 15:00
どちらも同じ instantを表せます。
IANA タイムゾーン名
システムは America/New_York や Asia/Tokyo(IANA Time Zone Database)のような名前を使います。これらは歴史的オフセット変更をエンコード — 将来イベントを DST 境界を跨いでスケジュールするときは固定「UTC+8」ラベルより優先。
オフセットだけはタイムゾーンではない。 ある日の UTC+8 だけでは国ごと DST ルールが異なるとき何が起きるか分かりません。
保存 vs 表示
バックエンドのベストプラクティス:
- UTC instant(タイムスタンプまたは
TIMESTAMPTZ)を保存 - UI またはユーザー別レポートでのみローカルタイムゾーンに変換
要点
タイムスタンプはいつを保存; タイムゾーンは時計の読み方を決める。どの層を見ているか常に把握してください。