回答受付が終了しました

ID非公開

2020/11/17 12:53

66回答

2000年問題の原因は理解できるのですが、そもそも西暦の下2桁だけで判断してしまうプログラムを作らず、西暦の全体で判断するプログラムを作れば良かったのではないのですか?

回答(6件)

0

インターネットのNTPは、1900年1月1日午前0時0分0秒を0秒とした32ビット整数で、C言語の時刻は、1970年1月1日午前0時0分0秒を0秒とした31ビット整数で、時刻を管理しているから、各々、2036年2月6日午前6時28分16秒と2038年1月19日午前3時14分8秒に、桁あふれして0に戻ってしまいます。 2000年問題と同じことが起きるまで、20年もありません。 ただ、2000年当時のコンピュータは、「いかにもコンピュータ」「見るからにコンピュータ」な存在だったけど、今後は、IoTが進んで、何でもかんでもコンピュータになっていくだろうから、対策が求められるソフトウェア・ハードウエアの数も、誤動作したときの影響も、とんでもなく大きくなるはずです。 どうする?

2

え、まさかお前年号を「4桁」で処理してるの?そんなコード、西暦10,000年になったらぶっ壊れるに決まってるだろ、何考えてるの?

2人がナイス!しています

0

>閏年か閏年でないかでなぜ不具合が起きると考えられていたのでしょうか? カレンダーが1日ずれるんですよ、2000年2月28日の次が3月1日になるんですよ。そんな機器を使っていたとしたら生活に不具合がないわけないじゃないですか。ビデオデッキの予約録画とか。 当時は今みたいに番組表から選ぶんじゃなくて、録画したい日付と時刻とチャンネルを入力して予約してましたからね。 国民の身の回りの製品等の2000年問題への対応状況について https://www.kantei.go.jp/jp/pc2000/991216tab.html どこまで正確にグレゴリオ暦のうるう年の計算をしているかに影響されるから 1. 西暦年が4で割り切れる年はうるう年 2. 4で割り切れても、100で割り切れる年はうるう年でない 3. 100で割り切れても、400で割り切れる年はうるう年 西暦を下2桁だけで持っていると 3.の判定ができないから、1.2.だけで「2000年はうるう年でない」という結果になります。あるいはプログラマが手抜きして1.だけ実装していれば2000年は正しく動作するかもしれませんけど。

ID非公開

質問者

2020/11/17 21:24

ミサイルの誤発射が起きる可能性があると言われていたそうなのですが、日付がなぜミサイルの誤発射につながるのでしょうか?

0

2桁の年が使われた理由は、2000年をまたぐまでの何十年もの間、年を2桁で表すのは社会で普通だったから。(今でも2桁の年はよく使われてるしね) とはいえプログラム処理は4桁の年(相当のデータ)でないと不便なので、内部的には4桁の年を持ち、表示や入力などユーザインタフェースだけ2桁なものが多かったと思う。 データ容量を削るためというのもなくはないけど、(ファームやハード、データ通信などは容量制限があるから)、どちらかというと当時の慣習で2桁が使われたと思う

ID非公開

質問者

2020/11/17 14:51

ありがとうございます。 もう一つ質問なのですが、なぜ西暦の表し方が西暦の表示以外のシステムにも影響が出るのですか?

0

原沢信道さんの言っている内容もあるけどHDDやメモリの容量問題っていうのもある。 今みたいにGBが普通なんて時代じゃなかったし、メモリなどは馬鹿高かった。 たった数byte削ることにより データ全体の容量を減らしたいとか プログラムの容量を減らしたいとか 限られたメモリで動作させることで安く済ませたいとか あったのです。 当時の容量に対する物価調べると動作メモリ等を削りたいという企業や公共団体の泣ける懐事情がわかります。 まぁ余裕が出てきた後2000年問題起こすプログラムを撒き続けたことにたいする罪状はしょうがない。

ID非公開

質問者

2020/11/17 14:24

ありがとうございます。 もう一つ質問なのですが、なぜ西暦の表し方が西暦の表示以外のシステムにも影響が出るのですか?