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

1,489 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,489
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
4
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

あなたの時計は大丈夫? 「想定外」だった日時の不具合(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. まとめ• 耐用年数をきちんと考えて作りましょう• 耐用年数を超える場合は対策を施しましょう• テストは慎重に行いましょう

×