「2038年問題」の版間の差分

m (robot Modifying: it:Bug dell'anno 2038)
time_t型の具体的な[[符号 (数学)|符号]]やサイズなどは、C言語の規格を定めた「ISO/IEC 9899:1999」のSection 7.23.1において「implementation defined」とされているが、同項ではtime_tを「size_t」型と規定しているほか、size_tについてはSection 7.17.4において「The types used for size_t and ptrdiff_t should not have an integer conversion rank greater than that of signed long int unless the implementation supports objects large enough to make this necessary.」という記述がされていることから、実際には32ビット符号つき整数('''signed long int型''')を使って実装されている場合が多く、その上限値は、(2<sup>31</sup> - 1)すなわち21億4748万3647である。
 
このようなC言語の実装で作られた[[アプリケーションソフトウェア|アプリケーション]]では、1970年1月1日0時0分0秒から21億4748万3647秒経過した2038年1月19日3時14分87秒を越えるとこの値が[[負の整数|負]]と扱われ、誤作動する可能性が高い。さらに、この仕様は他の多くの[[プログラミング言語]]でも採用されているため、それらの言語で作られたアプリケーションも同様に誤作動する可能性が高い。
 
ただし後述するように、この期日以前でも[[プログラム (コンピュータ)|プログラム]]で内部的にこの秒数を超えた時刻データを扱おうとすれば同様のエラーが発生するため、[[2004年]][[1月11日]]にはすでに[[現金自動預け払い機|ATM]]の誤作動といったトラブルが発生した(プログラム中に現在時刻を2倍する式があったため、21億4748万3647秒の半分以上経過した時点で誤動作が発生した)。他にも顕在化していないトラブルが今後表面化するという可能性はあり得る。
匿名利用者