レッスン 5

よくあるタイムスタンプの落とし穴

Y2038、浮動小数点秒、単位の取り違え、曖昧な日付文字列。

形式がシンプルに見えても、タイムスタンプは予測可能な方法で失敗します。パターンを認識するとデバッグ時間を節約できます。

Y2038 と整数限界

古典的 32 ビット符号付き time_t2038-01-19 付近でオーバーフロー。レガシー組込みと古いバイナリは依然 32 ビット秒を使うことがある。現代 64 ビットサーバーは保存ではほぼ回避するが、エクスポート CSV や古いクライアントはそうでないかもしれない。

JavaScript Date はミリ秒 double — 範囲は巨大だが、パーサーに貼った非常に大きな整数は依然失敗しうる。

1000 倍オフ(秒 vs ミリ秒)

症状:

  • 1970-01-01 付近の日付 → 秒をミリ秒として扱った(値が小さすぎ)
  • 50000 年超の日付 → ミリ秒を秒として扱った

常に尋ねる: 「このフィールドは sec か ms か文書化されているか?」

曖昧なローカル文字列

タイムゾーンなし 2024-06-01 00:30 は東京とトロントで異なる instant。「サーバーローカル」vs「ユーザーローカル」vs「UTC」としてパースするとバグ報告が大きく変わる。

夏時間の隙間と繰り返し

DST 移行日、ローカル壁時計は繰り返したり飛んだりする。秋の巻き戻し日の「午前 2:30 ローカル」は無効または曖昧なことがある。アラームと課金には UTC instant を保存。

文字列ロケールの驚き

03/04/2024 は US ロケールでは 3 月 4 日、EU では 4 月 3 日。機械可読フィールドでは ISO 2024-03-04 を優先。

要点

多くのタイムスタンプバグは単位混乱タイムゾーン欠落レガシー幅限界 — 難解な数学ではない。まずこの 3 つを確認。

実践したいときは関連する DevCove ツールを使えます。任意であり、このレッスンの必須部分ではありません。

関連ツールを開く

コース概要へ戻る