コメットコラム: Y2K (1999-03-21)

似たような省略語であるが, I18N よりずいぶん有名になりつつある Y2K に 関する話をすることにする。
ご存知のとおり, "Y2K" は Y と K の間に 2 文字が入る単語を 意味しているわけではない。(Y = Year ) と (2K = 2000) が合わさったもので, 2000 年を意味する。コンピュータ業界にとって, Y2K は, 単に 2000 年という年 を指すのでなく, Y2K problem の Y2K としてとらえられている。

英語の Y2K problem は, 日本では通常, "西暦 2000 年問題" と前に "西暦" という言葉を補うのが一般的である。 なぜなら, 日本では西暦表記の他に元号表記も日常的に使用されているからである。 昭和から平成へ移る際の混乱以来, 西暦を使用する割合は増えていると思われるが, まだまだ多くの場所で元号表記が使用されている。例えば, 自分の誕生年を 西暦年ですぐに言えない人も多いのではないだろうか?

I18N Book の第 6 章でも説明してあるが, 世界中にはいろいろな日付や時間の 表現形式が存在する。日本の場合, 一般に西暦と元号の 2 種類であるが, さまざまな宗教が混在する国などでは 3 種類以上の暦が使用されているところも あるようである。

国際化機能を盛り込んだ XPG4 の仕様では, 西暦に加えて 別の形式(1 種類だけ)で日付を表現する手段を用意している。 お使いのシステムが XPG4 準拠の UNIX システムであれば, 日本語ロケールに設定して以下のコマンドを実行してみると, 元号表記で日付および時間が表示されるかもしれない。

	% date +"%Ec"
これは, XPG4 の国際化機能の一つとして, date コマンドが内部で呼びだしている strfrime() 関数に, ロケールに依存して別の形式で日付や時間を表現するための %E 修飾子が導入されたことによって可能になったものである。

日付や時間に関係する国際化機能の仕様は, 入力や出力の表現方法の部分だけに 関係していて, 内部のシステム時間の処理には無関係である。したがって, システム全体がダウンするといったような問題が, 国際化に関係して起こることは まず考えにくい。また, OS などのシステムの時間処理関数が内部で 2 桁で 年の処理をしているということもまず考えられない。しかし, それらを利用するアプリケーション(OS 付属のコマンドも含めて)が入力や出力で 1900 年代を仮定した 2 桁の処理を行っているケースは多い。また, 日本では 年の入力を元号で行うケースもあると思われるが, 2000 年になると 西暦の下 2 桁入力の 00 と平成元年の入力とが混同されるケースもあるかもしれない。

システム関連でよく発生するのは, 閏(うるう)年のチェックもれである。 閏年はオリンピックと同じく 4 年ごとにやってくる。 最近では, 1996 年がそうだった。4 年ごとのルールには, 例外があり 100 で割り切れる年は閏年にはならない。したがって, 1800 年, 1900 年は 閏年ではなかった。そして, さらにこれにも例外がある。400 で割り切れる年は, 閏年になるのである。ということで, 2000 年は 2 月 29 日が存在する 閏年なのである。うまく年を越せても, 3 月まではのんびりとできない コンピュータ業界なのであった。

さて, 時間に関する概念にタイムゾーンというものがあるが, これによって 地球上でも 2000 年への到達には時間差が生じる。GMT の世界標準時だけで 計算している場合は, GMT が 2000 年になった途端に, 世界中で同時にズドンと いってしまうわけだが, それぞれのローカルの時間での処理に関しては, 津波や地震波のように地球を東から西に向かって 2000 年の波が走っていくことになる。

まず最初に到達する大きなコンピュータ市場は, ニュージーランドらしい。 ニュージーランドで「来たぞー, 気をつけろー。」と叫ぶとすぐに オーストラリアの東海岸で「しまった。やられたかもしれない。」と, 間もなく日本, 韓国で「こっちもやられたが, 傷は小さいぞ。皆気をつけろー。」 そしてすぐに中国, 香港に到達する。 5, 6 時間たって, モスクワから徐々にヨーロッパに迫っていく。 そして, 日本に到達してから 9 時間後, いよいよイギリス, グリニッジ時が 2000 年に到達する。世界中がその時をかたずをのんで見守っている。 日本での被害状況のデータを掴んだアメリカも, 「やることはやった。 あとはその時を待つだけだ」と, 冷静に状況を見つめている。 そして, その瞬間がやってくる。テレビではグリニッジの様子を映し出す。 「どうなんだ?」よく状況がわからないまま時間は経過し, 時間の波はアメリカ東海岸のニューヨークを襲う。 それから 3 時間後, やっと波はシリコンバレーのあるアメリカ西海岸に到達する。 その頃, 日本は夕方 5 時になっている。 オフィスで待機していたコンピュータ会社の社員も, 「今日はこんなものだろう。問題は, 月曜日の 1 月 3 日だな。 とりあえず今日の分の祝杯でもあげに行きたいところだが, 店はどこも休みだな。やれやれ。」と, 帰り支度を始めていた。

おそらく, これほど緊迫した状況にはならないと想像しているが, 1999 年 12 月 31 日から 2000 年 1 月 1 日への日付の変更は, 世界中で多くの人々が秒針を見つめて過ごすのではないだろうか。

さて, 最近友人から「28 年戻し」という "大技" の存在を教えてもらった。 2000 年と, それから 28 年前の 1972 年のカレンダーがちょうど曜日が 同じになっているらしい。UNIX 上の cal コマンドで確認してみると, 確かにそうだ。ちゃんと, 閏年にもなっている。実際にそんなことをやるところが あるのかどうかは知らないが... 皮肉なことに, 1972 年という年は, 西暦年を下 2 桁で処理することを標準仕様として含んでいる COBOL 言語の ISO 規格が制定された年である。 (西暦年 4 桁対応の ISO 規格は 1989 年に制定された。) その時代からの蓄積が今日の西暦 2000 年問題をひき起こしているわけだが, その頃からのコンピュータの普及, 技術の発展は, 多くの人の想像を越えていたと 言ってよいだろう。 先日亡くなったスタンリー・キューブリック監督の「2001 年宇宙の旅」は, 1968 年の作品である。その時代に映画を見た人が 2001 年も, 2000 年も はるか先の未来と考えていたことは容易に想像できる。

時は進み, 2000 年がすぐそこまでやってきた。 西暦 2000 年問題は, コンピュータと社会との関わりを あらためて見つめ直すよい機会となるだろう。

あなたは, 2000 年 1 月 1 日をどこでどのようにして迎えますか?


[コメットコラム目次へ] | [I18N Book ホームページへ]