おはようございます
ソフトブレインのシニアAです
今回は「たろう」さんと「社長」さんからご指名を頂きましたので、僭越ながら2000問題について一筆書かせて頂きました
ではどうぞ・・・
1900年代当時のコンピュータシステムでは、人が西暦年の下2桁を入力して、これをコンピュータシステムが4桁の西暦年に変換していた
つまり70と入力すれば1970年、80と入力すれば1980年に、90と入力すれば1990年に変換するようにプログラミングされているのだ
2000年問題とは、上記の様なコンピュータシステムに西暦2000年の下2桁である00を入力した際、コンピュータシステムが正常な2000年に変換できず、異常な1900年に変換してしまい、結果としてコンピュータシステムが誤動作してしまう問題である
私がコンピュータ業界に入った1982年当時、メモリ容量節約の意図で年の下2桁だけを保存したり、業界の慣わしによりお客様から指定されて下2桁にせざるを得ない場合などがあった。
開発に携わったシステムエンジニアの多くは、自分が開発しているシステムが20年も30年も40年も使用され、2000年を越えても使用されるとは考えていなかった
2000年問題のもう1つの問題、それは2000年が閏年として処理できていないコンピュータシステムが存在した
閏年は4年に1度来ると単純ではない。次の条件を満たした年だけが閏年だ。
① 西暦年が4で割り切れる年は、閏年である
② ①であっても、100で割り切れる年は、閏年ではない
③ ②であっても、400で割り切れる年は、閏年である
これらのプログラミングがきちんとできていなければ、コンピュータシステムが2月29日を処理するときに異常な結果となる。
2000年問題と並んで、2038年問題がある。コンピュータシステムの内部で時間を表すとき、4バイト変数に格納して日時を計算している
この変数は1970年1月1日からの秒数で成り立っているが、2038年1月にオーバーフローして負値になり、コンピュータシステムの誤動作につながる。
この問題はプログラム開発する際に時間を表すのは8バイト変数に格納して日時を計算するように変更しなければならなくなった
ただ古いコンピュータシステムは4バイトのままだから、2038年まで使っていれば何らかの影響はでるだろう
コンピュータシステムが扱うものがインフラ(電気・ガス・水道・銀行・株式・鉄道・飛行機)など生活に重要なものであった場合に影響が大きくなる
そのため、私たちシステムエンジニアは今まで開発してきたシステムに対する責任として、修正を掛けなければならなかった。
いまでは当時の忙しさが懐かしい・・・
終わり・・・
SE道場では、プログラミングの極意や開発の苦労話等、様々な記事を投稿しています
是非ご覧ください
1つ前の開発秘話は...