2001年9月9日問題


UNIX、Windowsなどの環境で使用されているC/C++言語では、日時データをGMT/UTC1970年1月1日午前0時00分00秒を起点として、1秒毎に1を加算した値(time_tデータ型)time関数で管理する方法をよく使われているが、この値を10進数表示すると、GMT/UTC 2001年9月9日午前1時46分40秒(日本時間同日午前10時46分40秒)に9桁(999999999)から10桁(1000000000)に桁上がりする。この値を文字列、あるいは10進数データ(COBOL)で扱うプログラムで、代入先に9桁固定の領域を設定している場合、2001年9月9日午前1時46分40秒(日本時間同日午前10時46分40秒)以降にデータ項目辞書のインポート機能を実行すると、新規に追加される項目が正しく追加されないにという事故が起こる問題の名称。例えば、time関数で取得した値を10進数に変換を行い、9桁領域でデータを扱う場合に問題が起こる。この問題に対応するには、C言語のtime関数で求めた2進数の時間を10進数に変換し、9桁以下の領域で処理を行っているプログラムのロジックを見直すことで対応できる。ただし、COBOLのDATE文で取得した処理については9月9日問題に該当しない。コンピュータが数字で管理し続ける限り、このような問題は永久に話題になることだろう。