2108年問題
読み:にせんひゃくはちねんもんだい
外語:year 2108 problem
ファイルシステム「FAT」が抱える時限爆弾の一つ。
概要
MS-DOSで採用されたファイルシステムのFATは、年月日を32ビットで管理する。
但しその管理方法は独特で、32ビット中、日付に16ビットを使い、年7ビット、月4ビット、日5ビットとしている。
起点は1980(昭和55)年1月1日であるため、1980+27-1年、すなわち2107年までは理論上対応可能である。つまり、1980年1月1日〜2107年12月31日の範囲の日付に対応する。
この仕様により、FATファイルシステムでは、2108(令和90)年以降が表現できない。これが2108年問題である。
特徴
FAT
2108(令和90)年になってもまだFATが使われているのかは謎である。ただ、2000年問題の根本原因は「その頃には使われていないだろう」という点であったので、その考えを真摯に受け止めれば、使われていても不思議ではない。
但し、古いFATの実装では年を2桁で扱っているため、下二桁80〜99が19xx年、00〜79年を20xx年として処理する。ゆえに2108年より更に前、2079(令和61)年までしか正常に利用できないという別の制限「2080年問題」がある。
FAT以外
FAT以外でも、FAT形式で日付を保持する実装は多岐にわたる。16ビットで比較的長期にわたり日付を扱える上、年月日をビットで簡単に分けられるのが魅力となっているためと思われる。
そういった実装でも、当然として仕様上の制限として2108年問題が生じる。
例えば交通系ICカードでもSuicaをはじめとして多くのカードがこの形式で日付を履歴に記録しているため現状のままでは2108年問題が生じることになる。ただSuica等交通系ICカードは概ね公式10年の有効期限となっており、あまりにも昔のことは無視できる。そこで過去50年程度が表現できれば充分と考えると、例えば記録年はBASE+0〜99の範囲で回し、+50年である2030年からある程度過ぎた頃、50〜99はBASE=1980で維持しつつ、0〜49はBASE=2080であると再定義すれば、50年の延命ができることになる。更に50年経ったら50〜99もBASE=2080とすれば更に50年延命できる。実際のSuica等がどうするのかはその頃にならないと分からないが、ここで示した例は他の表現方法でも似たような方法で使われており、割とありふれた方法である。
再検索