Curious TechieDev Toolbox
すべてのガイド/時間 & エポック8 min read

UNIX時間(エポック秒)の仕組みと2038年問題の全貌

1970年1月1日からの経過秒数を数える理由、32ビットと64ビットのタイムスタンプ、うるう秒とシステム対策。

重要ポイント (要約)
  • UNIX時間は、1970年1月1日 00:00:00 UTCからの通算経過秒数を表す時刻表現です。
  • タイムゾーンに依存しない単一の整数値であるため、データベース保管やシステム同期に最適です。
  • 2038年問題(Y2038)により、32ビット符号付き整数は2038年1月19日に桁あふれ(オーバーフロー)を起こします。
  • UNIX時間はうるう秒(Leap Second)をカウントせず、ステップ調整されます。

コンピュータシステムが世界各地の分散サーバー間で時系列イベントを一意かつ狂いなく順序付けするためには、単調増加する絶対的な数値基準が不可欠です。その基礎標準がUnixエポック時間(Unixタイムスタンプ)です。

1. Unixエポックとは何か?

Unixエポックは、協定世界時(UTC)の1970年1月1日 午前0時0分0秒と定義されています。その瞬間から経過した秒数が、整数カウンターとして1秒ごとに加算され続けます。

2. 秒(10桁)とミリ秒(13桁)の違い

LinuxやPOSIXカーネルは時間を10桁の「秒」(例:1787610000)で管理します。一方、JavaScriptやJavaなどのアプリケーション実行基盤は13桁の「ミリ秒」(例:1787610000000)を用います。相互変換は1,000の乗算・除算で行われます。

3. タイムゾーンとISO 8601文字列表記

エポックタイムスタンプ自体には時差(タイムゾーン)の概念が存在せず、宇宙空間における絶対的な一時点を表します。JSTやESTといった時差表現は、ISO 8601形式(YYYY-MM-DDTHH:mm:ssZ)で画面表示する際にのみ適用されます。

4. 2038年問題(Y2038)の技術的真相

符号付き32ビット整数型で時間を保持するシステムは、2038年1月19日 03:14:07 UTCに上限の 2,147,483,647 秒に達してオーバーフローを起こし、負の数(1901年)へ巻き戻ります。現代の64ビット環境では約2920億年先まで安全に表現可能です。