20XX年問題特集 (注意:このコンテンツは2004年8月2日に公開しました)
駄文作成機+で言ってたのを実行に移そうと思います!
2000年問題というのはアレだけ騒がれただけあって有名ですが、実はこの先にも色々存在するのです
今回はそれに関する特集をしていきたいと思います
皆様に分かりやすく読んでいただくために
難しい表現はワシなりに噛み砕いて説明していくつもりです
そのため多少の語弊が生じている箇所もあると思われますので
あまり厳密に受け取らず「20XX問題というのは大体こーいうものか!」
…という感じで柔らかく受け取っていただければ嬉しいです(^^;
そもそも西暦2000年問題って何だったっけ?
実は「西暦2000年問題」と呼ばれているモノは複数存在したのです
ある意味だからこそあそこまで大々的に騒がれたとも言えるでしょうが
とりあえずまずはそれに関しての解説をしていきたいと思います(^^;
まず1番有名な問題は「2000年を1900年と解釈してしまう」という奴です
これはどういうことかと言いますと、当時の日付を認識するプログラムは、年号を下2桁だけで認識していたのです
例えば58なら1958年、99なら1999年という具合です
そして、2000年と言えば下2桁は00ですね?
もうおわかりでしょうが、コンピュータはこれを1900年と認識してしまうのです
コンピュータ:「1998年の次は1999年...1999年の次は..1900年か!?」...とまぁそんな感じです(^^;
当時のこのプログラムを書いた技術者達は「まさかこれが2000年まで使われてるなんて..」と思っていることでしょう
所詮人間が作り出したモノ・・・ 人間が決めた以上のことは出来ないのです(うまいこと言ったつもり)
もう1つの問題は「2000年が閏年として処理されない」という問題です
閏年..2月29日が存在する年のことですね(何 この閏年になる基準はどんなモノかというと...
「4で割り切れ、なおかつ100で割り切れない年が閏年」というのが一般的には知られています(だから1900年は閏年じゃないです)
しかし、西暦2000年ってたしか閏年でしたよね?
実は閏年を決定する基準にはもう1つ「400で割り切れれば必ず閏年」というモノがあるのです
西暦2000年はいわば、400年に1度の例外的な閏年だったわけなのです
この問題により、「○日までの日数を求める処理」や「曜日を条件とした処理」などが正しく行われなかったかも知れなかったようです
幸いなことに西暦2000年問題は一部の発電所などで多少の障害は出たものの、特に生活を脅かすような重大なことにはなりませんでした
いやぁ..あの年は旅行者も極端に減ったらしいですが
何も起きなかったとなるとこれは良かったのか…空しいのか…どうなんでしょうね(^^;
コンピュータは現在日時をどう決めてるんだ?
基本的には適当な時刻を起点にして、そこから何秒経過したかによって現在時刻は算出されています
例えば、1970年1月1日午前0時00分00秒を起点として動作している時計があるとします
この時計において、「起点日時から何秒経過したか?」というデータが3だった場合
表示されている現在日時は1970年1月1日午前0時00分03秒となります..
同じように経過秒数のデータが753だった場合、この時計の現在日時は1970年1月1日午前0時12分33秒となります
そう、もうおわかりでしょうが、大抵のプログラムはこれと全く同じように現在日時を算出しているのです!
大体の仕組みが分かったところでチョットだけ踏み込んだ話をします(何)
上記の「起点日時から何秒経過したか?」というデータは2進数という特殊な(?)数字で認識されています
「2進数? 何それ? おいしいの?」な人も居ると思いますので、これについて説明しますと...
ワシらが普段使用している数字は0,1,2,3,4,5,6,7,8,9,10,11,12という感じで増加していきますね?
このように、0〜9の10種類で進んでいく数を10進数、さらにこの進み方を10進法と言います、つまりワシらが普段使ってる数は10進数なわけです
それと同じように、2進数とは0と1の2種類だけで進んでいく数のことです 0,1,10,11,100,101,110,111,1000...と進んでいきます
以上のことを踏まえて考えると、前述した時計で「起点日時から何秒経過したか?」というデータが11だった場合
表示されている現在日時は1970年1月1日午前0時00分03秒となります..(2進数の11=10進数の3)
とりあえずこの項目で現在日時は起点日時に経過時間を足して算出されているということと
起点時間からの経過時間の数値は2進数で表現されているという2つのことが理解出来ていれば大丈夫です(何
〜前述した時計を再現してみました(笑)〜
1970年1月1日午前0時00分00秒+秒(2進数)=(現在時刻)
〜とりあえず2進数に変換してみよう♪〜
まだまだある!? 西暦20XX年問題..
そう、コンピュータの日付機能に関する問題はまだまだ存在します!
此処からは今後起こりうる「西暦20XX問題」を取り上げていきます..
ちなみに此処では2007年問題などの時間と関係がない問題は割愛させて頂きます(^^;
西暦2019年問題
これはほぼ全く皆様には縁がない問題だと思います(^^;
この年はMacOS6.xにおいて、時計が数えられる秒数がいっぱいになり、0に戻ります
なんといっても現在MacOS6.xを使っている人は滅多にいないので、これ以上の詳細は省きます(^^;
西暦2030年問題
さて、前述した2000年問題はかなりニュースの話題を占領しました
当然それに対する対策も色々行われたワケですが、その対策の一部に問題があるのです
西暦2000年問題を回避する為には、下2桁だけで年を解釈する仕組みから4桁で解釈する仕組みにプログラムを書き直せばいいのです
しかし、プログラムを修正する技術者達にしてみれば、問題のあるプログラムをいちいち4桁で認識するように書き換えていくのは面倒くさかったのです
だから「下2桁だけで解釈する仕組みのままで、西暦2000年問題を回避する方法はないだろうか?」と考える技術者も出てくるわけです
その応急処置のような対策のうちの1つに「下2ケタが00〜29なら2000年代、30〜99なら1900年代と解釈させる」というモノがあります
たしかにこうすれば西暦2000年問題は発生しないかも知れませんが、2030年になったときにどのみち1930年と解釈されてしまいます
コンピュータ:「2029年の次は...下2ケタが30になるから...そうそう1930年だな..うん」
言うまでもなく、この現象は2030年1月1日午前0時00分00秒に発生します(^^;
西暦2036年問題
Network Time Protocol(通称NTP)は、インターネットで繋がれたコンピュータ同士の時刻を同期させるために使われているものです
NTPは世界標準時の1900年1月1日午前0時00分00秒から何秒経過したかによって日時を算出しています
そして、NTPは起点日時からの経過時間を4294967295秒までしか数えることが出来ないのです
何故かというと、前の項目で述べたとおり、経過時間は2進数という形で表現されています
4294967295秒を2進数に直すと11111111111111111111111111111111秒となりますね?
実はNTPは32ケタまでしか経過時間を表現出来ないのです(上記の奴が限界ですね)
それで、数えられなくなったらどうなるかというと、0に戻ってしまいます つまり現在日時が起点日時と認識されてしまうのです
(前の項目で述べたとおり、コンピュータは現在日時を「起点日時+経過時間」で算出しています 経過時間が0に戻ったら....ね?(何)
世界標準時の1900年1月1日午前0時00分00秒から4294967296秒後といえば世界標準時で2036年2月6日午前6時28分16秒...
日本時間で表すと2036年2月6日午後3時28分16秒にNTPの返す日付は1900年に戻ってしまいます
インターネットを利用した時間調整が全くできなくなるので、これは大問題といえるでしょう(何
西暦2038年問題
C言語と呼ばれる言語で日時を決めているプログラムは
世界標準時の1970年1月1日午前0時00分00秒から何秒経過したかによって日時を算出しています
そして、C言語は起点日時からの経過時間を2147483647秒までしか数えることが出来ないのです
さて、C言語も上記で述べたNTPと同様に32桁まで経過時間を表現することが出来ます
しかし、2147483647秒を2進数に直すと1111111111111111111111111111111秒(31桁)...「あれ? まだいけるじゃん?」
そう、NTPと同じ32桁なので4294967295秒まで表現することが出来るはずです 「なんでC言語は31桁まで?」...と思うかも知れません
実は32桁目(最上位)は+(プラス)や−(マイナス)の符号が入るためのスペースなので、数字は入ることが出来ないのです
つまり、C言語で表現することが出来る経過時間は実質「-2147483647秒〜2147483647秒」だけなのです
..まぁややこしい話を抜きにすると、C言語は起点日時からの経過時間を実質31桁までしか表現出来ないわけですね
ではもし32桁目に1が入ったらどうなるのかといいますと、32桁目の1を−(マイナス)と勘違いして、現在日時を1970年以前と認識してしまうのです
世界標準時の1970年1月1日午前0時00分00秒から2147483648秒後といえば世界標準時で2038年1月19日午前3時14分08秒...
日本時間で表すと2038年1月19日午後12時14分08秒からC言語の返す日付は1970年をさかのぼっていきます(^^;
ちなみにこの問題に関しては既に予兆と思われるトラブルが銀行のATMに発生しています
また、この問題はC言語の仕様に関する問題です
プログラムをちょっと修正すれば直る問題ではないので、かなり深刻といえるでしょう(何
西暦2040年問題
これも西暦2019年問題と同様、皆様には全くと言っていいほど縁がない問題ですが、一応書いておきます(^^;
Macintoshの内部クロック(時計)は世界標準時の1904年1月1日午前0時00分00秒から何秒経過したかによって日時を決めています
大抵の製品は全く問題ないのですが、初期のMacintosh128Kだけは4294967295秒までしか数えることが出来ないのです(理由は西暦2036年問題のNTPと同じ)
世界標準時の1904年1月1日午前0時00分00秒から4294967296秒後といえば世界標準時で2040年2月6日午後6時28分16秒...
日本時間で表すと2040年2月7日午前3時28分16秒に初期のMacintosh128Kの返す日付は1904年に戻ってしまいます
ちなみに、最近の製品は西暦29940年まで大丈夫です(笑
西暦2042年問題
IBMの企業向け汎用コンピュータ(メインフレーム)にはTODと呼ばれる時計機能が内蔵されているものがあります
TODは世界標準時の1900年1月1日午前0時00分00秒から何マイクロ秒経過したかによって日時を決めています
1マイクロ秒は1/1000000秒のことです、つまり「1000000マイクロ秒=1秒」というワケです(^^;
そしてこの経過時間は世界標準時の2042年9月17日午後11時53分46秒頃(日本時間で表すと2042年9月18日午前8時53分46秒頃)に
数えることが出来る限界を超えてしまい、経過時間の値が0に戻ってしまいます(日時が1900年に戻ってしまいます)
その「限界」は2進数で64桁までらしいのですが、管理人の計算では52桁までになってしまったので(どんな計算したんだよ)実際のところはちょっと...;
...この問題に関してはもう少し調査が必要なようです...ううう(滝汗
西暦2050年問題
前述した西暦2030年問題と同じようなモノです
この問題が発生するのは「下2ケタが00〜49なら2000年代、50〜99なら1900年代」と認識させている奴です
とりあえずこの対策で済まされたコンピュータは2050年1月1日午前0時00分00秒にエラーを起こします
コンピュータ:「2049年の次は...下2ケタが50になるから...そうそう1950年だな..うん」
西暦2069年問題
前述した西暦2030年問題&西暦2050年問題と同じようなモノです
この問題が発生するのは「下2ケタが00〜68なら2000年代、69〜99なら1900年代」と認識させている奴です
とりあえずこの対策で済まされたコンピュータは2069年1月1日午前0時00分00秒にエラーを起こします
コンピュータ:「2068年の次は...下2ケタが69になるから...そうそう1969年だな..うん」
ちなみにもう面倒くさいので書きませんが、西暦2070年問題ってのもあります(これと内容はほぼ同じ)
余談ですが、西暦2069年と言えば、管理人は80歳です(笑
西暦2106年問題
西暦2038年問題でも述べたとおり、C言語は経過時間を実質31桁までしか表すことが出来ません
しかし、仮にもし32桁目の1が正しく認識され、西暦2038年問題が起こらなかったとしても、どっちみち32桁でいっぱいになってしまいます(何
どうあがいても4294967295秒(2進数に直すと1が32個並ぶ)までしか数えることが出来ないのです(^^;
世界標準時の1970年1月1日午前0時00分00秒から4294967296秒後と言えば世界標準時で2106年2月7日午前6時28分16秒
日本時間で表すと2106年2月7日午後3時28分16秒に経過時間が0に戻ってしまい、日時を1970年と認識してしまいます
余談ですが、西暦2106年と言えば、管理人は多分あの世です(笑(生きていれば102歳)
何がどうヤヴァイのか?
此処まで読んだ人の中にはおそらくこう感じる人が多いんじゃないでしょうか?
「ぶっちゃけ、日時が狂うだけだろ? 何がそんなに問題なんだ?」
そう、たしかに「○○年問題」と大げさな呼び方をされている割には、その本質は「日時が正しく認識されない」とかそんなのばっかりです
しかしちょっと待ってください、もし本当にそれだけならこんなコンテンツ作りません(笑
それではいったいどんな危険性があるのでしょうか?
実は...何が起こるかなんて分かりません
「貴様ふざけるな!」と思うかも知れませんが、実は何が起こるか分からないから驚異なのです
つまり、実際に何が起こるかは分かりませんけど、「こんなことが起こる可能性がある!」という仮説は大量に存在するのです
それではその「起こりうる可能性」とやらを見ていきましょう
銀行からお金が引き出せなくなる!?
西暦2000問題のときに特に囁かれたのが、「銀行の預金残高のデータが0になる」などの銀行関連のモノです
そりゃぁそういったデータは日付とかも関わっているわけですから(預金した日時の記録とか定期預金のデータとか...)
100年前に日付が戻ってしまうとなると預金などが0になってしまうのも納得がいきます
当然これから問題が近づくにつれてこういった話はニュースなどに登場することになると思います(何
電化製品が使えなくなる!?
そもそも「日時」というモノが何処にどのように関わっているのかが不透明なのです
だから電化製品だって西暦20XX問題の例外ではなく、色々厄介な影響が出る可能性もあります
以下のことを試して壊れたりしても責任は取りませんが、PCの日付をメチャクチャ進めたら起動しないアプリケーションが出てきます
携帯電話なんかに至ってはデータが初期化されてしまう場合もあります(友人の古い携帯で確認)
そんなワケなので、なんらかの電化製品が壊れたり、使えなくなる可能性も充分考えられます(^^;
ミサイルが誤発射される!?
ミサイルが勝手に発射されるわけではないが、ミサイル発射の引き金になってしまうことが考えられます
例えばあなたがアメリカの軍隊の指揮官だったとします
20XX年1月1日午前0時00分00秒、早期警戒システムが作動して「ロシアから核ミサイルが飛んできました!」と警報が鳴ったとします
さぁあなたならこの後どうしますか?
とりあえず「やりやがったな糞野郎!」と言わんばかりに核ミサイルを撃ち返すでしょう!?
そう、この警報こそがコンピュータの誤作動なのですw
もちろんロシアだってミサイルが飛んできたら黙ってはいません、絶対反撃してきます(何
新年早々からド派手な花火大会が催されることになるかも知れないのです(^^;
...いや、漫画みたいな書き方をしていますが、これは西暦2000年問題のとき、実際に議論にのぼった話です(^^;
このトラブルを回避するため、アメリカとロシアが「戦略安定センター」というモノが設置することに合意しました(1999/9/10)
この「戦略安定センター」ってのは何かって言いますと、米露両国の担当者が双方の核関連施設を監視するモノです
だからたとえロシアの軍事施設で「アメリカから核ミサイルが飛んできた!」と警報が鳴っても、担当者の連絡でそれの真偽が分かるというワケです
この施設が設置されていたのは1999年12月上旬〜2000年1月下旬の間だけなので、今はもうありません
また次なる西暦20XX問題が近づくと設置されるのでしょうか?(何
ところで管理人的には20XX問題に便乗して核ミサイルをブッ放す国が出てきそうなのが心配です(^^;
そうなってくると日本だって全然無関係ではありませんよね? 別にどこから飛んでくるとはあえて言いませんが(笑
あとがき(?)
え〜と..まぁ此処まで日付に関する様々な問題を特集してきましたが、いかがでしたでしょうか?(何
...というか此処まで飽きずに読む人が居るのかな(笑 管理人は文章を詰め込むのがくせになってます(死ね
ビットとかソートとかそういった表現を全て噛み砕いて説明してきたので、多少不透明な部分もあると思います(^^;
また、間違いがあると思うので(死ね)もし「これは違うだろ」な箇所があればメール(通常のメール)で受け付けてます
さて、まぁ色々しゃべりましたが、要するにコンピュータは人間が決めた以上のことは出来ないってことです(何
そりゃぁ近い未来には「自分で考えるコンピュータ」というモノ(ロボット?)が世間に出回ってるかも知れませんけど..
そういったロボット達があるとき何らかの理由で人間に牙をむいたら!? ...多分勝てないでしょう...こっちは生身ですから(何
「人間が決めた以上のことは出来ない」っていうのが安全装置の役割を果たしているのかも知れませんね(^^;
え〜と...管理人のSFじみた話で終わるのも味気ないので、最後に「日付と関係がない20XX問題」を御覧頂きたいと思います
いやぁ...此処まで読んでくださってありがとうございます(^^;
西暦2006年問題
西暦2006年問題は「教育の西暦2006年問題」と「人口の西暦2006年問題」の2つが存在します
前者の方から解説します、西暦2006年はいわゆる「新学習指導要領の世代」が大学に入学する年です
そう、この新学習指導要領により、だいぶ学習内容が削られました
小学校では台形の面積の公式を習わないそうですし、中学校では解の公式、接弦定理を習いません(高校で習いますけど..)
とりあえずこのいい加減な教育を受けた世代が大学に入ったらどうなってしまうのやら..というのがこの問題です
しかし、まぁそりゃぁ日本の学力は低下の傾向にありますけど、めっちゃくっちゃ学力が落ちたようにも思えないんですよね(^^;
落ちていると言えば確かにまぁ落ちていますし、「もうちょっとまともな政策出来ないの?」とも言いたくなりますけど
超がつくほど学力が悪くなってるわけでもないみたいです、はい... 文部科学省のページ
後者の方に関して...
少子高齢化が叫ばれている世の中ですが、この西暦2006年を境に人口が急激に減少の経過を辿る可能性があるようです
西暦2050年までの減少数(予想)を平均すると1年につき約61万人が減少する計算になります
え? 凄さが伝わってこない?(^^; ..いや61万人って相当な数ですよ?(何
西暦2007年問題
西暦2007年問題は「IT業界の西暦2007年問題」と「ホテル業界の西暦2007年問題」の2つが存在します
まず前者の方、長年企業で様々な基幹系システムを開発してきたベテランがこの年に定年を迎えます(要するに引退する)
これにより、今まで培ってきた技術やノウハウが継承されず、基幹系システムの維持が困難になってしまう問題のことです
なんで西暦2007年かというと、1947年生まれの人々(1番多い世代)が定年を迎えるのがその年だからです(^^;
う〜む...「そんなものかなぁ..」と感じるのは管理人だけでしょうか?(死ね
伝統工芸とかならまだ継承されないってのは理解出来るんですけどねぇ..(何
そして後者の方ですが、簡単に説明すると「著しい外資系高級ホテルの進出のため、ホテルの部屋が余りまくる」というモノです
東京都心部で2007年までに新しいホテルの開設が大量に予定されています(どうもブームになってるらしい)
しかし、ホテルに泊まる客なんて急には増えませんし、景気も良くなる兆しはないので
どちらかというとホテルに泊まる客は減っていく傾向にあります(^^;
そんなわけなので、開設したは良いが、経営がうまくいかずにいきなり廃業(?)の可能性もあるわけです
西暦2008年問題
この年に小渕元総理が発行した国債(国の借金のこと)が償還(要するに返済)されます
ちなみにその金額は40兆円と非常に高額(^^; そんなわけで国債の市場が暴落してしまう可能性がある問題です
...が、この問題に関しては2002年から対策が講じられてきています
この大量の国債を2002年から少しずつ償還していき、2008年に償還額が集中しないようにしてるんだとか..まぁあまり心配はないようです
西暦2009年問題
まぁ..この問題に関しては日付に関係ないわけでもないのですが、とりあえずこっちに分類しました
「トリビアの泉」という番組で「2009年は9月にもゴールデンウィークがある」というものがありましたね(何
9月19日(土曜日)、9月20日(日曜日)、9月21日(敬老の日)、9月22日(国民の休日)、9月23日(秋分の日)で5日間連続で休日..というものです
ちなみに敬老の日は2001年6月の祝日法改正により、「9月の第3月曜日」と定義されました
さて、此処で気になるのは9月22日の「国民の休日」です 皆様の頭には5月4日のイメージが浮かぶと思います(何
なんで9月22日が国民の休日なのでしょうか?(知ってる人は凄い(何)
実は「国民の休日」は「祝日と祝日に挟まれた日」と定義されているのです
だから「憲法記念日」と「子供の日」に挟まれている5月4日は「国民の休日」なわけです(何
そう、西暦2009年は9月22日が「敬老の日」と「秋分の日」に挟まれますから、「国民の休日」となるわけですね
ちなみに2009年以降は2015年、2026年、2032年、2037年、2043年、2049年なんかも同様にこうなると予想されます
で、何が問題かというと、このことを知らなかったプログラマーが祝日処理の変更に追われてしまう..という問題です
それだけでなく、祝日か否かということは案外重要な事柄なので、厄介な問題を起こす可能性も無いとは言えないわけです
西暦2011年問題
この年の7月に地上アナログ放送が打ち切られます
ちょっと昔のテレビは全く映らなくなりますので、この年までに買い換えないとヤヴァイ?(何
ちなみに打ち切りになる理由は地上デジタル放送の急激な普及によるためです
う〜む...これも時代ですねぇ...(何
TOPページに戻る