|
|
標準的なC言語の仕様(ANSI C、JIS Cなど)では、時刻の表現形式として、1970年1月1日0時からの経過秒数をtime_t型で表現している。符号サイズなどは規定されていないが、符号つき整数(long int型)を使って実装されている場合が多く、この形式の実装の多くが32ビットで、その上限値は、(2の31乗 - 1)すなわち2,147,483,647であり、古いC言語の実装で作られたアプリケーションでは1970年1月1日から2,147,483,648秒経過した2038年01月19日03時14分07秒(世界標準時、日本時間では12時14分7秒)を越えるとこの値が負と扱われ、C言語で書かれたプログラムが誤動作する。
ただし、後述するようにこの期日以前でもプログラムで内部的にこの秒数を超えた時刻データを扱おうとしても同様のエラーが発生するため、2004年1月11日にはすでにATMの誤作動といったトラブルが発生した。他にも顕在化していないトラブルがあって今後表面化するという可能性はあり得る。
ANSI C以前のK&R C言語では、time関数の時刻の表現はint型である。
年数の扱い方に問題があった2000年問題はプログラムレベルでの修正が可能であったが、この問題は、現在普及しているC言語の処理系の実装にかかわる問題であり、2000年問題より深刻であるという指摘もある。