Time
Overview
システムの時間の取り扱いについて記載す
時間の表現方法
- UTC(Coordinated Universal Time)
- 世界標準の時間。原子時計ベース。夏時間なし
- 例:
2025-09-27T03:00:00Z
- タイムゾーン
- UTC からのオフセットで表現
- 例: +09:00(日本)、-05:00(ニューヨーク冬時間)
- ISO 8601
- 標準的な表記ルール。
- 例: 2025-09-27T12:00:00+09:00
- T = 日付と時刻の区切り
- Z = UTC (Zulu time) を意味する
Unix Time(エポック秒)
- 基準:1970/1/1 00:00:00 UTC
- 値:そこからの経過秒数
- 形式:
- 秒単位 → 10桁(例: 1697451423)
- ミリ秒単位 → 13桁(例: 1697451423000)
- 特徴:タイムゾーンに依存しない。後で好きなタイムゾーンに変換して表示する
システム設計での考え方
DB保存時
- 原則:DBにはUTCで保存(timestamp with time zone / TIMESTAMP 型)
- 理由:世界中の利用に耐えられる、オフセットの解釈違いを避けられる
アプリ側
- 内部ロジック:UTC をベースに扱う
- 表示時:ユーザーのローカルタイムゾーンに変換
UI
- ユーザーに直感的に見せる → ローカル時刻(例: JST、ユーザーの環境)
基本的なデータ設計
基本的に公開・非公開を切り分けるのはサーバー側の時計を使用する。
サーバー側の時計は世界中のどこからアクセスしても変わらないのがメリット。
逆にUIはクライアント側の時計を使う。
注意
公開するのにクライアントの時間をつかって検証してはいけない。
T Zの意味
国際的なデータを取り扱っているときの次の表現 ISO8601で定まっている規格
2020-07-27T02:12:40Z
Tが日付と時間の区切り。 ZはタイムゾーンがUTCという意味。
UNIX TIME
ただ、一般的なUnix timeと言えば、秒の単gi位までのケースが多い。
1234567890 この通り10桁が正常(秒単位)
JSだと、13桁(ミリ秒まで)で返される。そのため / 1000をする。
UTC(Universal Time Coordinated): 協定世界時
世界で標準時として使用。セシウム原子が振動から導きだされた時間。
システムでのタイムゾーン考え方
UI上はユーザが直感的に理解できる日付の表示を行いつつ、BEではグローバル展開も視野にUTCでデータを保管するケースがある。