本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。

最終更新日:1999年7月7日

PCにおける2000年問題


PCにおける2000年問題として「年越え問題」と「閏年問題」があります。
その他に、2000年対応問題として一般に取り上げられているものがあります。このような問題も含めてシステムを検証しておくことが必要です。

年越え問題

PCにおける2000年問題の1つに、1999年12月31日から2000年1月1日にかけて年越えを行なった場合の日付表示問題があります。

●BIOSの2000年対応の問題

PCではOS(オペレーティングシステム)が起動時に、ハードウェアをコントロールするBIOS(バイオス)と呼ばれるプログラム群から年月日を取得します。OSは、BIOSから日付データを取得後、OS内部のソフトタイマー(ソフト的に持つ時計)により日時のカウントアップを行ないます。

BIOSが2000年に対応していない場合、BIOSはOSに「2000年」と渡すべきときに「2000年」ではなく「1900年」を渡してしまいます。そのため、OSは2000年を正確に表示する事ができなくなります。

BIOSが2000年対応しているものには、1999年から2000年に西暦が変わると西暦の上位2桁を19から20に書き換える仕掛けが入っています。この場合、2000年を越えてもOS起動時に2000年の日付をOSは取得できるため正常動作が可能となります。

例:
MS−DOSではOSの内部カレンダーは1980年から2099年までとなっており、BIOSから1900年の日付を取得するとOSの内部カレンダーに無い日付となるため、OSはエラーとして1980年1月4日(1980/01/04)を表示します。(2000年以降のどの日でも、MS−DOSでは1980/01/04となります)

MS−DOSを1999年12月31日から2000年1月1日まで連続稼動させると、MS−DOSは2000年1月1日と正常に表示します。これは、MS−DOSがBIOSから日付取得を行なうのが起動時の最初の1回だけで、以降はMS−DOSが持つソフトタイマーによって日付のカウントアップを行なうためです。
しかし、2000年1月1日以降にMS−DOSを再起動すると、BIOSから日付取得を再度行なうため、1980年1月4日となってしまいます。

●OS自身の2000年対応の問題

MS−DOSは、内部カレンダが1980年から2099年までありますので、DATEコマンド等での日付表示もOSの機構としては正常に表示できるようになっています。

MS−DOSの上位で動作するWindows3.1に関しては、一部のユーティリティにより2000年の表示が誤表示してしまう事が報告されています。この件に関しては、マイクロソフト社より改修モジュールが提供されているので、それを入手し使用してください。(マイクロソフト社のWWWホームページより入手可能)

Windows95も、Windows3.1の場合と同様です。

WindowsNTは、MS−DOSと違い、日付補正のためにOS起動時以外の運用時にもBIOSでもつ日付データを参照します。そのため、BIOSが2000年未対応の場合、1900年を取得しOSの日付を1900年に書き換えてしまいます。
また、BIOSの2000年未対応に関係なくWindowsNTでは一部のユーティリティで2000年を誤表示してしまう事やドメインユーザマネージャにおける2000年の誤認識が報告されています。
これらの誤動作を改修したものは、WindowsNT3.51+SP5 + y2k351ijモジュールとWindowsNT4.0+SP4+Y2Kアップデートプログラムとなります。これ以前のWindowsNTでは2000年の対応を行なう予定が無い事をマイクロソフト社がアナウンスしています。

なお、マイクロソフト社のOS製品の2000年対応状況については、こちら(マイクロソフト社のWebページへ)をご覧ください。


2000年の年越え問題は、上記のようにまず、ハードウェア(BIOS、RTC)が2000年に対応できているか? 次にOSが対応できているか?という観点で考えます。
次に、OS上で稼動するソフトウェアについて2000年対応できているかを調査し全てのハードウェア、ソフトウェアが2000年対応できている事が確認できれば、そのシステムにおける2000年対応ができていると言えます。


閏年問題

2000年問題のもう一つの問題として閏年問題があります。
2000年は閏年であるため2月29日が存在します。
閏年の算出方法は一般的に4で割り切れれば閏年と認識しますが、もう一つ閏年を算出する方式があります。それは、“4で割り切れるが100で割り切れる年は閏年では無い、しかし400で割りきれる年は閏年である。”というものです。
2000年は上記の方式からも閏年として認識されますが、中には“400で割り切れる年は閏年である。”という条件を加味しないものが存在します。そうすると、2000年は4で割り切れるが100でも割り切れるため閏年では無いという事になります。
これが、2000年の閏年問題として認識されているものです。
これも、BIOSやOS、上位ソフトウェアにおいて閏年計算を行なっている全てのコンポーネントが対応していないと、PCが誤動作を起こす事になります。

また、通算日数の問題もあります。
プログラムが利用する関数の中には通算日付を返すものがあります。(C言語のgetdate関数等)
閏年を認識しないものは、2000年1月1日から3月1日までの通算日数を60日と返します。本来は61日と返さなければなりません。
これも、閏年問題として扱われています。


2000年対応問題

●西暦2桁処理

西暦の下2桁のみを取り出し日付計算を行なう問題です。
2000年の下2桁を取り出すと00年として扱われます。
2000年から1999年を引くと通常1年となりますが、下2桁で計算すると(00年)—(99年)=(−99年)となります。
これが、西暦の2桁処理問題です。

●マジックナンバー処理

マジックナンバー処理: アプリケーションの中には、特別な数字の場合、特別な処理を行なうものがあります。
例えば、”9999”等がよく使われます。この場合特殊コードの”9999”なのか、1999年9月9日を表わす”9999”なのかアプリケーションが判断できず、間違った意味で捉えられる場合があるようです。

●西暦制限

OSを含め、アプリケーション等で2000年をめでたく越えられたとしても、次にいつまで使用できるのかという問題があります。
各ソフトベンダはいつまで使用できるかを2000年問題の情報と共に提供しています。
これを西暦制限と呼びます。



ホームページへ戻る PC 2000年問題 目次へ戻る

Copyright(c) 1998-1999 Oki Electric Industry Co., Ltd.

inserted by FC2 system