古いwebシステム使っていませんか?2038年問題を知らないと危険!?
愛車の車検が近づいてきて、ワタワタしてる今日この頃。
皆さんも、ほったらかしにしてた事の締め切りが近づいたら、慌てますよね…
新たにWebサービスを開発しているのですが、
意外と忘れがちで、この先ほったらかしにできない問題があるのをご存知でしょうか?
そうです、2036年問題と2038年問題です。
パソコンに詳しい人か、パソコンに詳しい人でもあまり知られていない場合もあります。
そして、エンジニアなら絶対に知っておかないといけない問題です。
いつの時代も問題が多すぎますね(汗)
2036年問題と2038年問題は何が起こる?
どちらもインターネットやパソコン、システムがバグを起こしてしまうと言われています。
特に時刻関係を使っている機器は影響を受けます。
例えば、予約受付サービスや組み込み機器の表示などです。
2036年問題とは?
2036年問題とは、西暦2036年の特定の日時以降の日付と時刻を正しく扱えなくなる問題のことです。
インターネットなどのIPネットワーク上での時刻合わせに用いられるNTP(Network Time Protocol)の仕様が原因になります。
NTPを用いると、1900年01月01日00時00分00秒からの積算秒数を返して、今の時間を割り出します。
この起点となる時刻は特に決まりが無いものらしく、決めた人もそこまで長く使わないだろうと考えていたのか。
あるいは、進化することを知っていたからなのか。
説は定かではありませんが、とにかくNTPは使わない方が無難ですよね。
今2020年ですから、16年後って結構すぐです。
2038年問題とは?
2038年問題とは、2038年1月19日3時14分7秒を過ぎるとコンピューターが誤作動するという問題のことです。
日付を取得する際にunixtimeという定数を用いる場合に起きます。
その日を経過すると1901年12月13日金曜日20時45分54秒に戻ってやり直し…
ということになります。
32ビットのシステムを使っていたらという条件もあります。
unixtimeというのは、基準日である1970.01.01 00:00:00から何秒過ぎているかを表す定数です。
古い機器を長く使っていることは良いですし、素晴らしいことなのですが、
企業ではまだまだUNIX系OSが組込み機器にも数多く、
Webシステムにも用いられているので切り替えが必要になります。
コスト削減を考えていたら、切り替えするのに莫大な費用がかかってしまうことがありえます。
2036年問題と2038年問題の違い
大きく分けると、
2036年問題はインターネット経由で取得する時刻。
インターネットなどのIPネットワーク上での時刻合わせに用いられるNTP(Network Time Protocol)を使っています。
2038年問題はパソコンなどの機器から取得する時刻。
と考えると簡単でしょう。
ShibaEmonでは長く使えるシステム開発を行なっています!
2036年問題と2038年問題はまだ先だろうと考えていると痛い目に合います。
消費税の改定時に小売店に勤めていましたが、
その際には、かなりの時間と労力を使った覚えがあります。
正直何万点もの商品の値札を取り替えなければならないという苦行ですので、無しにして欲しいところです。
が、そうもいきません。
しっかりと事前に準備しておくことで、
慌てて対処することが無いと思います。
古いシステムを使い続けている方がいらっしゃいましたら、
ぜひShibaEmonにご相談くださいませ。
エンジニア向け!2036年問題と2038年問題の対処方法
難しそうとは言え、気をつけるポイントさえ知っておけば対処できるので、
早めに手を打って、確認と対応をしましょう!
ここから先はエンジニア向けです。
2036年問題の対処方法
■NTPサーバが送信するデータを64ビット整数に変更する
64ビット整数にすれば、西暦3000億年くらい使えます。
■受信側で変更する
1900年に戻ったとしても、2036年以降に変更してあげる。
解決方法はこちらの方が詳しく解説されています。
ありがたや。
https://ari23.hatenablog.com/entry/year-2036-problem-ntp (opens in a new tab)
2038年問題の対処方法
エンジニア界隈で知らない人がいたら、知っておいた方が絶対良いですし、古いシステムを使っているのであれば、対処すべき事柄です。
Webシステムやワードプレスなどに用いられている人気言語PHPには、2038年問題が密接に関わってきます。
とても便利な関数でstrtotimeとdateと呼ばれるものがあります。
日付フォーマットの文字列をunixtime(コンピュータシステム上の時間表現)に変換したり、
指定した日付フォーマットの文字列に変換することができる便利な関数です。
これについては、DateTime Classを用いて対処しましょう。
2036年問題の対処方法に記載した、64bitにすれば良いのではという根本解決方法も難しいので、
32bitに対応するDateTime Classを用いるととても便利です。
ちなみに、この対処方法を詳しく解説してくださっているブログがあります。
ありがたや。
https://www.zenken.co.jp/blog/engineer/26593 (opens in a new tab)
今後、DateTimeが主流として使われると考えていますが、
まだまだ経験の浅いエンジニアや、古いシステムを使われている方も沢山いらっしゃると思います。
ぜひ、この機会に覚えておきましょう!
それでは、良いWebライフを!!