Unix Epoch(1970年1月1日)

Unix epochとは何か、なぜ1970年1月1日が基準点に選ばれたのかを解説。Unix timestampの仕組みと実際の使い方を詳しく説明します。

Concept

0

詳細な説明

Unix epochとは、1970年1月1日 00:00:00 協定世界時(UTC)として定義された瞬間です。すべてのUnix timestampはこの基準点からの経過秒数として計測されます。Unix timestampとは、このepochから経過した秒数(うるう秒を除く)を単純に表した数値です。

なぜ1970年1月1日なのか?

1970年代初頭、Ken ThompsonとDennis RitchieがBell LabsでUnixを開発していた際、時刻を計測するための固定基準点が必要でした。初期のUnixシステムは、1秒の分解能でtimestampを格納するために32ビット整数を使用していました。システムの誕生に近い日付を選ぶことで、カウンターがゼロ付近から始まり、表現可能な日付の範囲を最大化できました。1970年1月1日のUTC午前0時は、自然にフィットするきりの良い開始点でした。

実際の動作例:

Timestamp 0          → 1970-01-01T00:00:00Z
Timestamp 86400      → 1970-01-02T00:00:00Z (1日後)
Timestamp 1704067200 → 2024-01-01T00:00:00Z

Unix timestampの1の増分は、正確に1秒を表します。特定の日付を得るには、epochから秒数を加算または減算します。1970年より前の日付は負の数で表されます(例:-86400 は1969年12月31日)。

よくある落とし穴:

最も多いミスは、秒ベースのtimestampとミリ秒ベースのtimestampを混同することです。JavaScriptのDate.now()はepochからのミリ秒を返しますが、多くのUnix系システムは秒を使用します。ミリ秒timestampを1000で割ると秒に変換できます。また、epochはUTCで定義されているため、ローカル時刻への変換には適切なタイムゾーンオフセットの適用が必要です。

実用上の注意点: 現代のほぼすべてのプログラミング言語、データベース、オペレーティングシステムがUnix timestampを理解します。言語に依存せず、タイムゾーンに依存しない時刻の表現方法を提供するため、分散システム間での時間データの保存と送信に最適です。

ユースケース

Unix epochの理解は、timestamp関連のバグをデバッグする際に不可欠です。日付が1970年1月1日と表示される場合、それは通常timestampにゼロが使用されたことを意味します。

Try It — Timestamp Converter

フルツールを開く