argius note

プログラミング関連

20xx年問題

移転しました
今まで漠然としか知らなかった、2036年問題と2038年問題の違いを調べてて発見。面白くて勉強になったよ。そういえば一部では2007年問題とかが話題沸騰ですね。あと、「昭和100年問題」なんてのもある。
肝心の調べ物は、以下にまとめ。

2036年問題=1900/01/01 00:00:00 + 0xFFFFFFFF + 1 = 2036/02/06 15:28:16
NTPは時刻の値を「1900年元旦からの経過秒数」で表しているが、その秒数を32bitで扱っているため、この年に桁あふれを起こす。
2038年問題=1970/01/01 00:00:00 + 0x7FFFFFFF + 1 = 2038/01/19 12:14:08
C言語に由来するシステムは、時刻の値を「1970年元旦からの経過秒数」で表しているが、その秒数を符号付32bit(time_tの実体の多くはsigned long int)で扱っているため、この年に桁あふれを起こす。