2038年問題だった!−銀行のATMトラブル
コンピュータの“西暦2038年問題”発生、早くも日本を揺るがす : IT Pro ニュース(2003/01)「2000年問題」を覚えている方は多いだろうが、 2038年問題なんて聞いたことないという人もいるだろう。 上の記事にも解説はあるが、ここでも書いてみる。
2038年問題による影響はすでに広く報道されている。1月11日に23行の銀行でATM(現金自動預払機)が一部の取引で正常に利用できなくなったトラブルの原因が、この2038年問題によるものだった。
1970年代、UNIXと呼ばれるコンピュータやそこで使用する言語の規格をつくるにあたり、 次のようなことが定められた。
1970年1月1日を始点として32bitの数値で日時をあらわすものとする要するに、コンピュータの内部では1970年1月1日0時0分0秒からの 経過秒数で日時をあらわすことにした。 (逆に1970年より前の数値は負の数で表す) そのほうがコンピュータ内での足し算、引き算などがラクだから。 もちろん実際に人間の目に映すときには秒数ではなく 普通の「○月○日○時○分○秒」に変換するわけだ。
32bitの数値というのはつまり2進数で32桁という意味である。 ということは、
00000000000000000000000000000000 は1970年1月1日0時0分0秒という具合である。このままいくと
00000000000000000000000000000001 は1970年1月1日0時0分1秒
00000000000000000000000000000010 は1970年1月1日0時0分2秒
00000000000000000000000000000011 は1970年1月1日0時0分3秒
11111111111111111111111111111111 は2038年1月19日3時14分8秒
となるわけだ。2進数で32桁までと決まっている以上はこれより大きな数値を表せない!=2038年問題
なんでもっと大きな桁数にしておかなかったんだ!という ツッコミももっともだが、1970年代当時は仕方なかった。 今のパソコンに比べれば当時のコンピュータの性能はゲームボーイよりさらに貧弱。 沢山の数値を覚えきって計算するほど性能がよくないので、 とりあえず32桁にしたのだ。 それに、半導体の性能アップと低価格化がこんな驚異的に進むなんて誰も夢にも思っていなかった。 もちろんソフトによってはより幅の広い日時を計算できるようになってるが、 もともとの規格がそうである以上、 複雑に結合されたコンピュータシステム全てはカバーできない。
「2035年ごろになってから騒ぐんだろう」と思っていたら、 こんな形で顕在化するとは。事実は奇なり。

コメント
「すべてがFになる」を思い出しました。
Posted by panhead at 2004年2月 6日
正確には符号つき32bitなので、0x7FFFFFFFです。
68年っていうのは2^31秒が根拠なのです。
Posted by kento1218 at 2005年7月26日
コメントする
(初めてのコメントの時は、コメントが表示されるためにこのブログのオーナーの承認が必要になることがあります。承認されるまでコメントは表示されませんのでしばらくお待ちください)