2001年9月9日問題

2001年9月9日問題の最新ニュースをまとめて検索!

2001年9月9日問題(にせんいちねんくがつここのかもんだい)は、コンピュータシステムにおいて、1970年1月1日0時(世界標準時)からの秒数が9桁から10桁になることで発生するプログラム上の不具合。

2000年問題をY2Kと略記するのと同様にs1g問題(second 1 giga)、あるいは10億秒問題と表記されることもある。

目次

[編集] 概要

問題の背景となるtime t型(1970年1月1日0時からの経過秒数)については、2038年問題を参照。time_t型の値が十進法で9桁(999,999,999)から10桁(1,000,000,000)になることにより、問題の発生が懸念された。

[編集] 実態

2000年問題が大きな社会話題として扱われたこともあり、多くの企業が2001年9月9日問題対応に関するページを作成したが、マスコミはほとんどこの問題を取り上げなかった。また一方で「秒数を10進9桁を上限とするプログラムを組むことなど考えられない」「トラブルは起こらないのではないか」という技術者の意見もあった。

だが個々のプログラムのレベルでは実際に問題が発生してしまった。確認されたものには

が挙げられる。2ちゃんねるのスレッドIDにもこの値が使用されていたが、問題は起こらなかった(事前にテストされた)。

これらの原因の多くは1970年からの秒数を文字列表現に直してソートしたことによるものであった。文字列(辞書順)でソートすると「1000000000」<「999999999」となり、項目が正しい順番で並ばなくなる。これにより新たに作られた項目が一覧表示されない、所定の動作が行われない、あるいは古い項目と勘違いされて削除されるなどの不具合が起こる。

UNIXのlsコマンドは、ファイル名が数値であっても文字列とみなしてソートする。またCGIプログラミングで広く使われているPerlも、sortコマンドは「数値は文字列に変換してからソートする」のがデフォルトとなっている。

このように文字列ソートがデフォルトになっていることに加え、1970年からの秒数が9桁になったのは1973年とかなり昔だったこともプログラマが油断するひとつの要因にもなった。今動いているほとんどのプログラムは1973年以降作られたものであり、これまでずっと秒数は9桁だったために、うっかり文字列でソートしても問題が起こらなかったのである(ちなみに10桁→11桁になるのは2286年という遥か先の話で、それよりも先に2038年問題がやってくる)。

[編集] 関連項目

[編集] 外部リンク

最終更新 2009年9月14日 (月) 19:41 (日時は個人設定で未設定ならばUTC)。
【2001年9月9日問題】変更履歴

ご利用上の注意