コンピュータ科学

UNIX時間における仕組みと歴史的背景

UNIX時間における仕組みと歴史的背景
UNIX時間の定義、協定世界時(UTC)との関係、データ型による表現範囲、および2038年問題について解説する技術記事。

📌 主なポイント

  • UNIX時間は協定世界時の1970年1月1日午前0時0分0秒(UNIXエポック)からの経過秒数に基づく。
  • 大多数のシステムにおいて、閏秒は形式的に無視または調整される。
  • 32ビット符号付き整数を用いたシステムでは、2038年1月19日以降に正しく時刻を扱えなくなる「2038年問題」が存在する。

UNIX時間(ユニックスじかん)またはUNIX時刻(ユニックスじこく、UNIX timePOSIX time)とは、コンピュータシステム上における時刻表現の一種です。協定世界時(UTC)での1970年1月1日午前0時0分0秒、いわゆる「UNIXエポック」からの経過秒数として形式的に表されます。

協定世界時(UTC)との関係

大多数のシステムでは、UNIX時刻は協定世界時(UTC)の時刻に基づき、閏秒の存在を形式的に無視して計算されます。正の閏秒が1秒挿入される場合、その挿入を挟んだ2秒間において、UNIX時刻の値は1秒分しか進みません。システムによっては、前後の時刻にズレを分散させて吸収する場合もあります。

UNIX時間が1,000,000,000に到達する直前の2001年9月9日を示す画面
UNIX時間 1,000,000,000 まであとわずかの 2001年9月9日

表現できる日付の範囲とデータ型

UNIXエポックからの経過時間を表現する際、秒だけでなくミリ秒やナノ秒などの単位が使われることもあります。また、数値を格納するためのデータ型として、32ビットまたは64ビットの符号付き整数や、浮動小数点数が用いられます。

  • 32ビット符号付き整数(秒単位):表現できる下限は1901年12月13日、上限は2038年1月19日までとなります。
  • 64ビット整数・浮動小数点数:より広い範囲の過去および未来の時間を表現可能です。

2038年問題

かつての多くのシステムでは、UNIX時間を32ビットの符号付き整数として扱っていました。この方式では、表現できる最大値(2,147,483,647)を超えた瞬間に値が負数へとオーバーフローし、正しく時刻を処理できなくなる問題が生じます。これが「2038年問題」として知られており、64ビット環境への移行が進められています。

よくある質問

UNIX時間とは何ですか?
協定世界時(UTC)の1970年1月1日午前0時0分0秒(UNIXエポック)からの経過秒数を形式的な数値として表すコンピュータ上の時刻表現です。
2038年問題とは何ですか?
32ビット符号付き整数でUNIX時間を管理しているシステムにおいて、表現可能な最大値を超えた際に時刻が正しく認識されなくなる不具合のことです。

関連記事

協定世界時2038年問題time_tユリウス通日

参考文献

  • POSIX.1-2017 Base Definitions, Chapter 4.15 Epoch.
  • The Open Group Base Specifications Issue 7.