レッスン 2
秒とミリ秒
10 桁 vs 13 桁の値と 1000 倍オフバグの避け方。
Unix 時間は秒で定義されますが、多くのランタイムはより細かい精度のためミリ秒を公開します。2 つを混在させるのが最も一般的なタイムスタンプバグの 1 つです。
桁数ヒューリスティック
10 進表記のおおよそのルール:
| 桁数 | 通常の意味 | 例 |
|---|---|---|
| 10 | 秒 | 1700000000 |
| 13 | ミリ秒 | 1700000000000 |
他の長さは文脈が必要 — 常に API ドキュメントで確認。
両方が存在する理由
- 秒 — コンパクト、多くのログと JWT 有効期限に十分; Python の
time.time()、多くの C API、Linuxdate +%s - ミリ秒 — JavaScript
Date.now()、JavaSystem.currentTimeMillis()、サブ秒順序の一部 JSON API
変換は 1000 倍または除算 — 方向を間違えると日付が 1970 年や遥か未来に飛びます。
小数秒
一部システムは浮動小数点秒(1700000000.123)を返します。これは依然「秒 + 小数」であり、ミリ秒ではありません。整数ミリ秒フィールドとしてパースすると精度を失うか検証失敗します。
防御的習慣
- 先に API スキーマまたはサンプル payload を読む
- 日付が約 1000 倍おかしければ、単位を頭の中で入れ替える
- 内部は 1 つの規約(アプリコードでは often ms または µs)で保存し、境界で変換
- DB では可能なら裸整数より
TIMESTAMPTZ型を優先
要点
秒とミリ秒は同じタイムラインを異なるスケールで名付ける。 変換や比較の前にソースがどのスケールか知ってください。