製品サポート: 西暦 2000 年問題とは関係なく、マイクロソフトでは、つねに
最新のリリースおよびサービス パックをインストールすることをお客様に
推奨しております。その一方、さまざまな理由で、お客様が最新のリリースに
変更できない場合があることも理解しております。お客様の西暦 2000 年への対応
作業にご協力するため、マイクロソフトでは、Windows 95 version OSR 2.5, 4.00.1111 を西暦 2001 年 1 月 1 日まで
"対応" ソフトウェアとしてサポートする計画です。リリースされる新しいサービス バックも
西暦 2000 年に対応しており、それには 2000 年対応以外の内容も含まれます。
これは、お客様に 2000 年対応のためだけに製品のアップデートをお願いすることを
最小限にするためです。
Windows 95 のバージョンを確認する方法については、マイクロソフトのサポート サイトにあるサポート技術情報 ( J049006) を参照してください。
対応期間:1980 ~ 2035 年
製品の概要
下記の既知の問題を解決するために、Windows 95 のソフトウェア アップデートがリリースされました。
日付の処理
- 保存 日付は、内部的には 4 桁の西暦で保存されます。ただし、MS-DOS ファイル システムの API は除きます。MS-DOS ファイル システムの API では、1980 年からのオフセットとして西暦が保存されます。このため、プログラムが MS-DOS の API から日付を取得する場合は、取得した西暦の値に 1980 を加算する必要があります。
- 下 2 桁の西暦の処理
MS-DOS の DATE コマンドでは、2000 年以降は下 2 桁の西暦を変更できません。正しい日付を入力するには、DATE コマンド (COMMAND.COM の内部コマンド) を使用して、西暦を 4 桁で入力する必要があります。4 桁で正しく入力しないと、「無効な日付の指定です」というエラー メッセージが表示されます。この問題に対処するには、COMMAND.COM の更新バージョンを使用します。
また、MS-DOS ファイル システムの API では、1980 からのオフセットとして西暦が返されます。このため、正しい日付を設定するには、返された値に 1980 を加算する必要があります。Win32 の API では、この問題の影響はありません。
Windows 95 での問題
WINFILE.EXE - Windows ファイル マネージャでは、2000 年以降の日付の表示や並び替えが正しく行われません。[すべての情報] が選択されている場合に、Windows ファイル マネージャを使用してフォルダの内容を表示すると、2000 年以降に作成したファイルの日付は、次のように表示されます。
- 2000 年 1 月 1日は、「1/1/;1」と表示されます。
- 2023 年 2 月 3 日は、「2/3/>3」と表示されます。
- 2036 年 3 月 5 日は、「3/5/=6」と表示されます。
COMMAND.COM - DATE コマンド (COMMAND.COM の内部コマンド) では、00 ~ 79 年の下 2 桁の西暦が正しく処理されません。この期間内の西暦を下 2 桁で入力すると、「無効な日付の指定です」というエラー メッセージが表示されます。
MSWALLET - Microsoft Wallet の 2.1.1383 より前のバージョンにクレジット カード情報を入力する場合は、2000 年以降の有効期限には年、月、日を入力する必要があります。このように入力しないと、日付情報が正しく解釈されません。たとえば、クレジット カードの有効期限として「5/01」と入力すると、現在の年の 5 月 1 日と解釈されます。
COMCTL32.DLL – コントロール パネルの [地域] で下 2 桁の西暦が設定されている場合、日時指定 (Date/ Time Picker) コントロールが正しい日付を返さなくなります。日付が正しく処理されるようにするには、[地域] で 4 桁の西暦を指定します。
VDHCP.386 - Winipcfg/all - 2000 年 3 月 1 日以降に取得された IP リースは、実際の取得日の前日に取得されたものとして記録されます。システム日付は正しく表示されます。ただし、DHCP クライアントは間違った日付を返します。
JAVA VIRTUAL MACHINE – Sun Microsystems の JDK (Version 1.1.1 ~ 1.1.5) に基づく Virtual Machine には、2000 年問題が認識されています。Java で記述されたアプリケーションが java.txt.SimpleDateFormat クラス ライブラリを使用している場合、4 桁の西暦が正しく解釈されません。
Java VM の最新更新バージョンは、次のサイトからダウンロードできます。
http://www.microsoft.com/java/vm/dl_vm31.htm
OLE DB の 2000 年問題:
次は、Data Coercion Library の 2000 年問題です。
ADO のコーディングで、
作成した ADO レコードセットに Date データ型 (たとえば、adDate、adDBDate、adFileTime、adDBTimeStamp など) が含まれている場合
日付の区切り記号としてスラッシュではなく、ピリオドを使った日付形式 (たとえば、01/01/98 ではなく 01.01.98) を使用している場合
さらに、60 年より前の西暦を指定している場合
データ コンバート (msdadc.dll) では、日付が時刻として解釈されます。たとえば、01.01.01 (2001 年 1 月 1 日) は 01:01:01 (1899 年 12 月 30 日 1:01:01am) に変換されます。
OLE DB に直接コーディングすると、同じ問題が起こります。
バリアント型 (BSTR、VARIANT、またはPROPVARIANT) から date データ型である
DBTYPE_DATE
DBTYPE_DBDATE
DBTYPE_DBTIME
DBTYPE_FILETIME
DBTYPE_DBTIMESTAMP
などに変換し、欧州の日付形式を使用している場合
そして、60 年より前の西暦を指定している場合
データ コンバート (msdadc.dll) では、日付が時刻として解釈されます。たとえば、01.01.01 (2001 年 1 月 1 日) は 01:01:01 (1899 年 12 月 30 日 1:01:01am) に変換されます。
TIMEDATE.CPL –コントロール パネルの [日付と時刻] - 日付が 2 月 29 日に設定されている場合に、[日付と時刻] で西暦を前に進めたり後に戻すと、うるう年以外の年にも 2 月 29 日が表示されます。
DIALER.EXE - ダイヤラー - 通話の終了後、[通話の記録] ダイアログ ボックスに日付が正しく表示されません。西暦を 2000 年に対応させると、日付が「100」、「101」、「102」 などと表示されます。
MFC40.DLL
および MFC40U.DLL
- この DLL
を使用しているプログラムは、西暦 2000
年またはそれ以降に不正な日付を表示するなどの問題が生じる可能性があります。例えば、2000
年 2 月 5 日が 100 年 2 月 5
日として表示されます。マイクロソフトでは、これを防ぐため、これらの
DLL をアップデートしました。MFC
を使用するソフトウェア開発者は、今後提供予定の
MFC40.DLL
対応ドキュメントで詳細情報を確認してください。また、この問題は、MFC42(u).DLL
には該当しません。
・Visual
C++: Microsoft Foundation Classes (MFC) 40.dll and Visual C++:
Microsoft Foundation Classes (MFC) 40U.dll 4.1 (英語情報)
・サポート技術情報
[VC41] COleDateTime の西暦 2000 年問題
Microsoft
Visual C++ Runtime library files
- Runtime library
を使用するプログラムが夏時間の補正を必要とする場合に、[日付と時刻のプロパティ]
で表示される現在時間より
1
時間早い時間を現在の時間として表示する可能性があります。この問題は、2001
年 4 月 1 日から
4 月 8 日の 1
週間の間、発生しつづけ、その後、夏時間の地域補正が期待通りに行われ、プログラムの時刻は、再度
OS に同期すると考えられます。この問題は、2001
に限らず 4 月 1
日が日曜日にあたる年では再度発生します。この問題の詳細については、以下のページをご覧ください。
・Visual
C++ April 2001 Issue (英語情報)
・Visual
C++ C Run-time library (msvcrt40.dll) 4.0,4.1 (英語情報)
(尚、本件は夏時間(サマータイム)に対応させるための機能に対して、修正が加えられたものです。日本では、サマータイムが実施されておりませんので本件は該当しませんが、もし作成されたプログラムで、サマータイムが関係する場合、内容ご確認ください。以下に参考情報として、日本語の技術情報のページをリンクいたします)http://mscominternal/japan/support/kb/articles/J028/9/18.htm
・サポート技術情報
[VC60] SP3: 夏時間が 4/1 に始まる年に調整が 1
週間遅れる
<関連情報>
・サポート技術情報
[VC60] 地域依存の考慮 (時間がずれる現象)
OLE Automation - Microsoft Automation ライブラリは 2
桁の西暦を解釈するルーチンを含んでおり、これによりアプリケーションは日付を誤解のない、すべてを表示する日付に変換することができます。Windows
95 では、OLE Automation の現在の 2
桁の西暦を解釈する区切りは 1999
年です。この場合、00
以降の 2 桁の西暦は 1900 年代と解釈されます。 [コントロール
パネル] の [地域] の [日付]
タブ内にある、世紀判定ウィンドウのユーザー設定には関係なく、00
年 1 月 1 日は 1900
年 1 月 1 日に変換されます。この修正は、2
桁の西暦の区切れを 1999 年から 2029 年に変更します。
XCOPY.EXE – オプションのパラメータ /D:date を指定して、xcopy を real モードで使用している場合、西暦を下 2 桁で入力することはできません。ただし、80 ~ 99 年を入力した場合は、「無効な日付の指定です」というエラー メッセージが表示されます。xcopy を protected モードで Windows 内から使用している場合、下 2 桁の西暦を使用できます。ただし、その上 2 桁は、"19" として解釈されます。たとえば、01 年 2 月 5 日は 1901 年 2 月 5 日と解釈されます。
ガイドラインと推奨事項
PC によっては、2000 年に達すると、西暦を 1980 などの不正な値にリセットするものがあります。この問題が発生するのは、コンピュータ ハードウェアと弊社以外の会社が作成した BIOS の基本部分に問題がある場合です。実際の作業には使用しない "テスト" マシンで確認を行うことをお勧めします。詳細については、製品ガイドの PC の BIOS に関するセクションを参照してください。 |