すべての記事

Unix時間:コンピュータが1970年から時間を数える理由

Unix時間(Unixタイムスタンプ)は、1970年1月1日00:00:00 UTCから経過した秒数です。この日付は「Unixエポック」と呼ばれ、ほぼすべての現代のオペレーティングシステム、データベース、プログラミング言語がこの日を基準に時間を数えています。

なぜ1970年なのか

この日付は特別な出来事のために選ばれたわけではなく、純粋に実用的な理由からです。1970年代初頭、Bell Labsで働いていたUnixの開発者たちは、当時の年をきりの良い開始点として単純に採用しました。この日付に深い意味はありません。

なぜ製造業の組み込みシステムでこの形式が根強いのか

工場の生産ラインや車載組み込みシステムでは、イベントログをUnixタイムスタンプで記録することが多い。複数の工場拠点や海外現地法人のログを時差の変換なしにそのまま数値として比較・ソートできるためで、長期間稼働し続ける制御機器では特にこの単純さが重視される。

2038年問題

多くの古いシステムは、Unix時間を符号付き32ビット整数として保存しており、2038年1月19日までの値しか表現できません。その日付を過ぎると、この数値はオーバーフローします——これは理論上の話にとどまらず、数十年単位でファームウェアを更新せずに稼働し続ける産業用組み込み機器では現実的なリスクです。

なぜこれが必要か

  • ログやAPIレスポンスからのタイムスタンプを、理解しやすい日付と時刻に変換する。
  • カレンダーを手動で計算することなく、2つの時点間の差を計算する。
  • タイムスタンプを扱う際のタイムゾーン関連の問題を診断する。

Unix時間とうるう秒

Unix時間は、地球の自転速度の遅れを補正するためにUTCに時々追加される「うるう秒」を無視し、1日を常にちょうど86400秒として扱います。つまり、うるう秒が追加される瞬間には、Unix時間は厳密にはUTCを正確に表しているわけではありません——ほとんどのシステムは、カウンターの飛びを避けるために1秒を「引き延ばす」か繰り返すだけです。

ツールを試す