この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)
出典検索?: "年問題"
年問題(ねんもんだい)は、暦上のある年や日付が到来すると、社会や日常生活に深刻な影響が起きる社会問題のことである。「Y年問題」や「Y年M月D日問題」のように呼ばれる。年問題は主に下記の3種類のものがある。
コンピュータの時刻処理における「桁溢れ」などの想定外の事態
人の動きや唐突な社会制度の変化による歪みの発生
暦そのものの構造的な欠陥(旧暦2033年問題など)
年問題という表現の発端は、コンピュータシステムにおける2000年問題が騒がれた出来事であり、それ以後は社会現象などの諸問題にも使われている。
コンピュータの時刻処理に関わる問題「en:Time formatting and storage bugs」も参照
コンピュータは記憶装置の容量や処理能力がいくら大きくとも原理的に有限の数字しか扱えず、想定していない日付を扱おうとした場合や、特定の年月日や時刻になった場合に誤作動を起こす(オーバーフロー、桁あふれ)。このシステム時刻処理に関する問題は、現代のように生活のあらゆる部分にITが行き渡っている時代には、思わぬところで思わぬ問題を起こしかねない。
日本で初めてコンピュータ内部の「年」に関する問題が起こったのは、1989年1月7日に昭和天皇の崩御によって元号が「昭和64年」から「平成元年」に変更された時である。特に公文書などで元号の変更を想定していなかったシステムが多数あったことから、問題が顕在化した。この他、年数を下2桁だけで処理していたシステムの中には、「昭和Y年」または「平成Y年」とみなして処理するものがあり、これにより誤動作が起きる場合もあった。
2000年問題(後述)では、事前に各企業が大量の経費を投入してシステムのチェックを行った上で、2000年が到来した瞬間には多数のソフトウェア技術者が何かあった時のために待機するなどの体制が取られ、世界的な社会現象となった。
なお年問題は、未来の日付を取り扱う必要が出てくると、その年に先んじて問題が顕在化することもある。例えば、10年更新の保険契約を扱う場合は10年前に誤動作が起こりうる。また、未来の日付を取り扱わない場合でも、計算の都合などで時間を数倍することがあり、それにより誤動作が起こりうる場合も存在する。
西暦
1999年問題 - 1900年を1年目と内的処理していた場合、年数が2桁から3桁になる。また、年号を下2桁だけで処理していたシステムの一部で年のエントリで99をエラーコードや例外値として扱っているものがあったとされ、そのようなシステムでは1999年になった途端に正当な1999年とエラーとを識別できず不具合をおこすことが懸念された。又、9が5つ並ぶ1999年9月9日にエラーが発生することも懸念された。
1999年8月21日問題 - GPSは内部処理で週数を10ビットで管理しており、起点である1980年1月6日から1,024週後にあふれて0に戻る。
2000年問題 (Y2K) - 年数を下2桁だけで処理していたシステムや、2000年を平年(閏年ではない)と誤解したシステムに問題が起こる。
2001年9月9日問題 - 1970年1月1日0時からの秒数が十進法で9桁から10桁になる。経過秒数を文字列表現に直してソートしたことで、「1,000,000,000 < 999,999,999」と判断してしまい、項目の新旧が正しく処理されない問題が実際に幾つかのシステムで発生した。
2004年1月10日問題 - 2038年問題の派生形で、1970年1月1日0時(Unix epoch)から2038年1月19日までの約21億秒の中間点にあたるこの日に潜在的なバグが発覚した。KDDIの通話料金処理、IIJのSEIL/neuルーター、20行以上の日本国内銀行ATMで、同日または翌日以降にトラブルが発生した。CADソフト「Pro/ENGINEER」は1ヶ月前に誤動作の可能性を発見し、予め対処してトラブルを回避した[1]。
2008年問題 - 2000年以降も年数を下2桁だけで処理していたシステムで、かつ年を文字列で格納していた場合に、先頭が0の場合には八進数として扱われる処理系があり、その場合2008年の時点で年の処理が不正となる場合がある。ごく一部のperlで作成されたネットゲームで誤作動が発生した事例がある。
2010年問題 - 潜在的なバグが発覚した。シチズン製電波時計やソニーのゲーム機「プレイステーション3」(閏年処理)、オーストラリアのクイーンズランド銀行でのシステム誤動作、ドイツジェムアルト社のICカード使用不能など。シチズンのケースでは、年の内部表現に西暦下2桁のBCDを使っていた。
2019年4月7日問題 - GPSは内部処理で週数を10ビットで管理しており、起点である1980年1月6日から2,048週後にあふれて0に戻る。(10ビットでは2回目)
2020年問題 - 2000年問題の1920年起点版。UNIXエポックの1970年1月1日±50年である1920 - 2019年をdate windowとしたシステムで誤動作を起こしている。
2022年問題 - 日時をyymmddHHMMの形式で扱っているシステムで、この値を32ビット符号付き整数(最大値は2,147,483,647)に変換した場合、2022年1月1日にオーバーフローする。Microsoft Exchange Server 2016/2019で問題が発生した。
2036年2月7日問題 - 1900年1月1日0時からの秒数が32ビットからあふれ、NTPに問題が起こる。NTPv4(バージョン4)以降では解決される。
2038年1月19日問題 - いわゆる2038年問題。Unix等で、1970年1月1日0時(Unix epoch)からの秒数が31ビットからあふれ、32ビット符号付きで処理しているシステムに問題が起こる。ext2、ext3、ReiserFS、UFS1、XFS等の各ファイルシステムのタイムスタンプはこの日までしか扱えない。また、古い32ビット版のミドルウェアやライブラリを利用したアプリケーションにも問題が発生しうる。
2038年4月23日問題 - ユリウス通日を内部日付表現に用いる物のうち、基準日(グレゴリオ暦1858年11月17日正午)からの修正ユリウス日(MJD)を使用し、かつ16ビットで処理しているシステムでは、日数が16ビットからあふれるために問題が起こる。
2038年11月21日問題 - GPSは内部処理で週数を10ビットで管理しており、起点である1980年1月6日から3,072週後にあふれて0に戻る。(10ビットでは3回目)
2040年問題 - MacOS等のファイルシステムHFSのタイムスタンプは2040年2月6日までしか取り扱えない。
2042年問題 - System zのSTCK命令で取得する64ビットのTODクロックは2042年9月17日中にオーバーフローする。
2048年問題 - 2038年問題の1980年起点版。
2053年問題 - 2038年問題の1985年起点版。TRONなど。
2079年問題 - FATファイルシステムのタイムスタンプの起点の1980年1月1日を基点として、年数を下2桁だけで処理するソフトウェアなどは、その起点の99年後(2079年12月31日)までしか正常動作しない。
2100年問題 - 2000年以降に作られた年数を2桁で表すシステムや、2100年を閏年と誤解したシステムに問題が起こる。
2108年問題 - FATファイルシステムのタイムスタンプは2107年12月31日までしか取り扱えない。