Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

あなたの時計は大丈夫? 「想定外」だった日時の不具合(OSC2011広島用)

1,635 views

Published on

NTPについて調べて2036年問題を知り、さらに2038年問題を知り、芋づる式に年問題がたくさんあることを知りました。このスライドは年問題について簡単にまとめたものです。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

あなたの時計は大丈夫? 「想定外」だった日時の不具合(OSC2011広島用)

  1. 1. あなたの時計は大丈夫?「想定外」だった日時の不具合 clu2c動態保存整備士 東平洋史
  2. 2. 日時に関する不具合が起きる原因• オーバーフローによるもの 「想定外」の期間使用 – 桁数の制限 • n桁で処理→n+1桁目に達してオーバーフロー – 積算日時の制限 • n桁で処理→n+1桁目に達してオーバーフロー • nビットで処理→n+1ビット目に達してオーバーフロー• 大小関係の定義ミスによるもの – 辞書順で処理• その他
  3. 3. 日時に関する不具合が起きる原因• オーバーフローによるもの 「想定外」の期間使用 – 桁数の制限 • n桁で処理→n+1桁目に達してオーバーフロー – 積算日時の制限 • n桁で処理→n+1桁目に達してオーバーフロー • nビットで処理→n+1ビット目に達してオーバーフロー• 大小関係の定義ミスによるもの – 辞書順で処理• その他
  4. 4. オーバーフローによるもの(1) 桁数の制限
  5. 5. 西暦2000年問題• 年を西暦下2桁で処理 1997 ⇒ 97 1998 ⇒ 98 1999 ⇒ 99 2000 ⇒ 00 →00は99より小さい →2000年(00)は1900年(00)なので1999年(99)より前! →誤作動⇒年を西暦4桁で表現して対応
  6. 6. 西暦2000年問題中途半端な対応下2桁で処理するまま残そうとしたが…• 西暦2030年問題 • 西暦2069年問題 – 00~29なら2000年代 – 00~68なら2000年代 – 30~99なら1900年代 – 69~99なら1900年代• 西暦2050年問題 • 西暦2070年問題 – 00~49なら2000年代 – 00~69なら2000年代 – 50~99なら1900年代 – 70~99なら1900年代 • 西暦2100年問題 – 00~99なら2000年代
  7. 7. 西暦2008年問題あるネットゲーム(Perl製)で実際に発生•年を西暦下2桁で処理•文字列として格納•先頭が0だと8進数として扱われる処理系 2007 ⇒ 07 … 8進数だとここが上限(00~07) 2008 ⇒ 08 … 08という8進数はない! 2009 ⇒ 09 … 実はここも該当
  8. 8. 西暦2010年問題•年を西暦下2桁で処理 • 発生した事例•2進化10進表現として格納 – シチズンの電波時計「ワ ールタイムドシリーズ」•「10」を0x10=16と誤認! (2008年に発覚) 2009 ⇒ 09 – オーストラリアクイーンズ 2010 ⇒ 16 ランド銀行の金融システ 2011 ⇒ 17 実際より ム(2010年) … 6年後と – ドイツジェムアルト社のIC 2018 ⇒ 24 誤認 カード使用不能 2019 ⇒ 25 – PlayStation3で2010年を閏 2020 ⇒ 32 実際より 年と誤判定(3月1日に2月 29日と表示して発覚) … 12年後と 2029 ⇒ 41 誤認
  9. 9. 元号の処理方法による問題• 昭和100年問題 – 年を昭和2桁で表現 • 平成以降も、内部的には昭和として扱う – 「平成23年」は「昭和86年」 • 官公庁や金融機関などに存在 – 「昭和100年(2025年(平成37年))=昭和0年」と誤認• 平成100年問題 – 年を平成2桁で表現 – 「平成100年(2088年)=平成0年」と誤認
  10. 10. もう一つの西暦2000年問題(閏年)• 閏年と算出できない 1. 4で割り切れる年は閏年 2000は4で割り切れる 2. 4でも100でも割り切れる年は閏年ではない 2000は4でも100でも割り切れる 3. 4でも100でも400でも割り切れる年は閏年 2000は4でも100でも400でも割り切れる – 条件3を忘れ、西暦2000年を閏年と判定できない
  11. 11. まとめ• 耐用年数をきちんと考えて作りましょう• 耐用年数を超える場合は対策を施しましょう• テストは慎重に行いましょう

×