スマートフォン用の表示で見る

2038年問題

コンピュータ

2038年問題

にせんさんじゅうはちねんもんだい

コンピュータソフトウェア内部の時間を管理する部分で桁あふれ(オーバーフロー)が起きるために発生する問題。

2000年問題に似ているが、処理系の仕様に関わるため2000年問題よりかなり厄介である。

概要

ANSI Cなど標準的なC言語の仕様では、プログラム上で日時を処理するのに、世界標準時1970年1月1日0時0分0秒(EPOCH TIME;日本時間では同日9時0分0秒)からの経過秒数(エポック秒)を使っている(ちなみにこれはUNIXの仕様に由来する)。

この数値を扱うデータ型「time_t型」は「符号付き32bit整数(signed long int)型」として確保しているシステムが多いため、符号部を抜いた31bitで表現できる最大の数値である2147483647秒(日時に換算すると2038年1月19日3時14分8秒)を超えると桁あふれを起こしてしまい、時刻の判定に誤動作を起こす可能性がある。

この問題は一般的なC言語のほか、同じエポック秒を利用し、これを扱うデータ型が符号付き32bit整数である他のプログラミング言語で作られたプログラムでも発生しうる。

対処法としては「time_t型」を「符号付き64bit整数型」などにしてしまうという手がある。