本職はシステム屋の私なんですが、ちょっとした面白い?出来事に遭遇したので書いておきたいと思います。
今年は元号が変わったこともありシステム屋さんは対応に大変だったことと思います。私もさほど大がかりではなかったものの、元号対応をしました。そして無事に乗り切ったのでした。
改元してから半年近くが経った今頃になってうまく日付が表示されないと言う話が出てきたのです。何でもシステムに未来日を入れようとすると「令和」ではなく「昭和」で表示されると言うのですね。
しかし私のところでは同じように操作しても問題なく令和で表示されるのです。
さてさて困ったなと思いながら色々話を聞いていくと、2038年1月19日まではキチンと表示されるのですが、2038年1月20日になるとおかしくなると言うのですね。
そこでネットを調べてみると2038年問題というのがヒットしました。おかしい原因はまさにこれだったのです。
2038年問題とは
コンピューターで当たり前のように使っている時間ですが、実は世界標準時間の1970年1月1日0時0分から何秒経過したかで日付と時間を管理しています。
日本時間で2038年1月19日12時14分7秒が、1970年1月1日0時0分0秒から2,147,483,647秒経過したことになります。これは2の31乗秒の1秒前に該当します。
パソコンで32ビット版とか64ビット版という言葉を聞いたことがあるかもしれません。難しい話は抜きにして、32ビット版で正数を扱う場合、その最大値は2の31乗-1、つまり2,147,483,647までしか扱うことができません。この最大値を超過するとオーバーフローという状態になってしまい、正しく動作しなくなってしまうのです。
解決方法はあるの?
うまく表示されないと言っていた人のパソコンは32ビット版のOSを搭載しており、うまく表示された私のは64ビット版を搭載していたのでした。
まさにOSを64ビット版にすれば問題は解決します。
他にもシステムのプログラムを変えるとか、ちょっと難しい話になりますが符号なし整数型(unsigned)を使うとか回避方法は色々あるようです。
まあ20年近く先の話なのでコンピューター自体が変わってしまっている可能性の方が高いと思いますが。
ただ大きなシステムだと簡単に変えることが出来ず、20年後も今のままというのがないとは限りません。20年後に2038年問題が出てきたときには昔問題に巻き込まれたことがあるよ、と自慢しようと思います(笑)。
この問題、全てのコンピューターで起きるというわけではないようです。今回私が関わったのはLinuxというOSを搭載したパソコンでの話となります。