要点:Unix タイムスタンプは、1970 年 1 月 1 日午前 0 時 UTC からの経過秒数です。ログや API が使うのは、曖昧さがなくタイムゾーンに依存しないからです。つまずくのは二点——秒とミリ秒の見分け、そして生の数値はローカルゾーンに変換するまで常に UTC だと忘れること。
サーバーをまたいでエントリを比較するとき、整数は書式化された日付より扱いやすい——タイムゾーンなし、ロケールなし、夏時間の曖昧さなし。しかしその「生」さこそ、文脈のないタイムスタンプが読み違えられる理由です。

タイムスタンプが 1970 年に始まる理由
Unix エポックは 1970 年 1 月 1 日午前 0 時 UTC で、初期の Unix 開発者がベル研究所で単純で固定された基準点として選びました。各 Unix タイムスタンプはその瞬間からの秒数にすぎず、算術——「この二つの出来事の間はどれくらい?」——を単純な引き算にします。
秒かミリ秒か
ログを読むときに最も多い間違いです。目安:値の桁が11 桁を超える(およそ 10¹¹ より大きい)なら、ほぼ確実にミリ秒です。現在の秒のタイムスタンプは約 17 億(10 桁)、同じ瞬間のミリ秒は約 1.7 兆(13 桁)。ミリ秒の値を秒前提のパーサーに渡すと、数万年先に着地します。
タイムスタンプは常に UTC
Unix タイムスタンプは絶対的な瞬間を符号化し、ローカルの壁時計時刻ではありません。人に見せるにはタイムゾーンを適用します——同じ数値が「ロンドンの 14:30」であり「ニューヨークの 09:30」です。双方向をきれいに変換するには、意図するゾーンを明示すること。よいツールは標準の IANA タイムゾーンデータベースと Intl.DateTimeFormat API を使い、その日付のオフセット(夏時間を含む)を正しくします。
保存・共有するものはすべて ISO 8601 で
タイムスタンプが人間に読めて、かつ機械にも安全であるべきときは、ISO 8601 を使います:2024-03-15T14:30:00.000Z。T が日付と時刻を分け、Z が UTC を示します。プレーンテキストとして正しく並び、次の読み手から秒かミリ秒かの推測を取り除きます。
2038 年の注記
タイムスタンプを符号付き 32 ビット整数で保存するシステムは、2038 年 1 月 19 日にオーバーフローします。多くの現代のプラットフォームは 64 ビット時刻へ移行済みですが、古いシステムや固定幅のデータベース列に出会ったときに知っておくと役立ちます。
実用的なワークフロー
- ログや API 応答から生の値をコピーする。
- それを タイムスタンプ変換ツール に貼り付ける。秒とミリ秒を自動判別し、選んだゾーンで日付を表示します。
- 引き算の前に、比較する二つの出来事を同じゾーンに変換する(または両方を UTC のままにする)。
- 結果は ISO 8601 で保存・共有し、曖昧さを再び持ち込まない。チケット用にログ抜粋を整えるなら、文字数カウンター と併用してください。
避けたいよくある間違い
- 同じ比較の中で秒とミリ秒を混ぜる。
- 生のタイムスタンプがすでにローカル時刻だと思い込む。
- 異なるタイムゾーンで表示された二つの出来事を比較する。
- 2038 年を越えられない固定幅 32 ビットの時刻フィールドを使う。