タイトル表示の問題を残した2000年問題、本格的な修正はこれからかカテゴリー業界動向
作成日2000/1/4 15:16:1作成者新居雅行
2000年問題は大きな問題はなかった…。一般メディアの論調や政府の発表はこぞって平静であったことを伝えているが、システムを管理する側にとって、顕在化した2000年問題へ否応なく取り組まなくてはならないのはこれからだ。大停電などの生活の基本サービスに問題がなかったのはいいことだが、あちらこちらで、「1900年」と誤認したり、「100年」などと表示したりする問題が発生している。やはり「2000年」「00年」は許容されても、「1900年」はともかく「100年」もピンと来ない表現だ。デベロッパーやシステム管理者はこうした不具合をつぶすことを、仕事として行う必要があると言えるだろう。

まず、UNIXサーバなどでのCGI作成によく利用されているperlでは、time関数、localtime関数で現在の日付を連想配列の形式で取り出すのが一般的な手法だ。そのとき、年については「西暦から1900年を引いた数値」が得られる。つまり、昨年までは99だったが、今年になると100という数字が得られるわけだ。その数字をそのまま表示すると、昨年までは特に違和感はなかったものの、今年は「100年」となり、ちょっと違和感がある。一般的には得られた年数に1900を加えるという措置で対処できるが、必ずしもそのようプログラムされているという保証はない。
メーリングリスト用ソフトで有名なfmlはperlで構築されている。通常のメール配信にはすでに修正されているなどして問題はなかったものの、配信メールをHTML形式で残す機能で「100年表示」がなされる点が発見されている。正月中にサポートメーリングリストでパッチが出回り、すぐにソフト自体の修正は行われた。しかしながら、利用者の側で必ずしもアップデートされるとは限らないため、表示の問題は長く残ると思われる。
同様に、1900を引いた数値で年数が扱われるシステムとしてJavaがある。Javaで作成しているシステムについても年数の処理を組み込んでいる場合には再度のチェックが必要だろう。
単純なログなら見てくれの問題で済まされる。しかし、後から集計処理をするようなデータをperlやJavaで処理している場合には細心の注意が必要だろう。たとえば、年をまたがった月次集計や年間集計が正しく連続して行われるようになっているかは今のうちにチェックすべきだろう。外に見せないデータなら、かえって、99、100のような年号のままの方が問題はないかもしれない。

JavaScriptについての2000問題もすでに指摘されているが、これから顕在化してくることになるだろう。JavaScriptはDate型変数からgetYearメソッドを使って現在の年数を得るが、昨年が99今年が100となるブラウザと、昨年が99今年が2000になるブラウザの2種類がある。Mac OS環境では、Netscape 4.5が前者、Internet Explorer 4.5が後者になる。問題は、perl/Java式にgetYearで得られた結果に1900を加えて、西暦の数値としている場合だ。Internet Explorerだと、今年は3900年になってしまう。実は筆者のサイトでもこの問題で、今年を3900年と判定してしまうことになってしまった(現在は修正済み)。これについての対処法などは、以下のとほほ氏のWebページに的確な解説がある。JavaScriptについては個人のWebページでよく使われており、事前にチェックということは(言い訳がましいが)どちらかと言えばあまりなされていない可能性が高いのではないだろうか。

◇getYear()に潜む2000年問題
http://wakusei.cplaza.ne.jp/twn/wwwjsz03.htm

実機テストがはしていないのだが、あるメーリングリストにCyberdogを使ってメールを投稿した人がいて、そのメールのヘッダにあるDateフィールドは「100年」という年号になっていた。ただし、同じメーリングリストでも、Cyberdogを使っていても「2000年」となっている場合もある。おそらく、Mac OSの日付&時刻の設定が年号を2桁としているときに問題が出ているのではないかと推測される。いずれにしても、Cyberdogは2000年問題に抵触しているものだと考えられる。
関連リンク