2038年問題
鎌田 誠 KAMADA Makoto
かなり先の話なのでX68kについて心配することではありませんが…
2038年問題というのはX68kに限った問題ではなく、あらゆる機種でC言語で記述されたプログラムで日付を扱っている場合に発生します。
ANSI-Cには標準でtime()という関数が定義されています。この関数は1970年1月1日午前0時0分0秒から現在までの経過秒数をtime_t型で返すものです。X68kではXCとlibcのいずれでも使えますが、libcのほうだけタイムゾーンの補正が入っているためにXCのtime()とlibcのtime()では結果が異なることに注意しましょう。
さて、time_t型は普通は32ビットの符号つき整数として宣言されています。32ビットの符号つき整数で表現できる最大の値は2147483647で、1日は60×60×24=86400秒ありますから、単純に割り算をすると2147483647÷86400=24855.135となって、1970年1月1日からだいたい24855日後にtime()の返却値がオーバーフローすることがわかります。
24855日後というとはるか未来のことのように思われるかも知れませんが、24855÷365=68.1ですから、1970+68=2038年頃にtime()関数の定義そのものが破綻してしまうことになります。これが2038年問題です。
2038年まで現在のANSI-Cの規格がそのまま使用されているということはないと思いますが、time()関数で生成した日付の情報を含むデータは残っている可能性があります。2000年問題にしても、まさか2000年まで使い続けるとは思わなかったプログラムやデータが今まで使われ続けてしまったために問題として露顕したわけですから、2038年問題が発生する可能性も否定できません。
更新履歴
(2000-07-28) 月刊電脳倶楽部139号(1999年12月号)の読み物横町のコーナーに収録された2000年問題に関する読み物から2038年問題に関する記述を抜き出してHTML化してSTUDIO KAMADAで公開
(2000-10-10) HTMLを更新
読み物と資料のページへ戻る