[VC41] COleDateTime::operator=(time_t) の西暦 2000 年問題

この記事は、以前は次の ID で公開されていました: JP225140
この資料は、アーカイブされました。これは "現状のまま" で提供され、更新されることはありません。
現象
COleDateTime::operator=(const time_t& timeSrc) 演算子は、西暦 1999 年 12 月 31 日以降の日付を正しく処理できません。たとえば、2000/02/05 は 100/02/05 と処理されます。この現象は、Windows 98 の Microsoft システム情報ツール (msinfo32.exe) でも再現することが確認されています。
原因
COleDateTime::operator=(const time_t& timeSrc) 演算子は内部で、localtime() 関数を使用して時刻値 (time_t) を現地時刻 (tm 構造体) へと変換しています。このとき tm 構造体の tm_year に格納される年は、1900 年からの経過年数になるため、2000 年は 100 としてセットされます。この変換後の値が、そのまま内部ヘルパー関数である OleDateFromTm へ渡された場合、OleDateFromTm ヘルパー関数は、内部で 2 桁までの年であれば、1900 を加算して処理しますが 2 桁を越える値、たとえば 100 がセットされた場合には 1900 が加算されません。結果として期待される 2000 年にはならずに 100 年という不正な値になります。

operator=(const time_t& timeSrc) を使用しているすべての関数において問題が表面化します。確認されている事例としては、COleDateTime オブジェクトの初期化において年数を 2 桁指定している場合、および COleDateTime クラスの初期化に time_t 型の変数を使用している場合があります。
解決方法
資料の冒頭に記載している製品の障害として確認しております。この障害は Visual C++ 4.2 以降のバージョンが使用する MFC では修正されています。また、この障害を修正した MFC40.DLL および MFC40u.DLL の、バージョン 4.1.6140(Intel) および 4.1.6200(Alpha) が公開されています。MFC40(u).DLL を使用している Windows プラットフォームについても、それぞれアップデート モジュールが公開されています。

Visual C++ 4.0, 4.1, 4.2 ユーザー

再頒布用モジュールが以下の Web サイトよりダウンロードできます。

Windows 98 西暦 2000 年問題修正プログラム (1999/03 より提供)

システム ディレクトリの MFC40.dll を更新することができます。以下の Web サイトよりダウンロードしてください。

Windows NT 4.0

システム ディレクトリの MFC40.dll, MFC40u.dll を更新することができます。以下の Web サイトよりダウンロードしてください。または
詳細
この修正モジュールを必要とするのは、Visual C++ 4.0 または Visual C++ 4.1 により作成されており MFC の共有 DLL バージョンを使用するプログラムのみです。EXE, DLL または OCX が MFC40(u).DLL を使用しているかどうかは、Windows のクィック ビューアまたは、SDK ツールの Dependency Walker にて確認できます。
関連情報

サポート技術情報

文書番号 : 218877
タイトル : [NT]Mfc40.dll を使用したプログラムが 2000 年に不正な日付を表示

文書番号 : 414969
タイトル : [SQL]HOWTO: SQL Server 6.5 の西暦 2000 年対応について

文書番号 : 414888
タイトル : [NT] NT 4.0 SP4 の 2000 年問題修正モジュール適用確認方法

文書番号 : 221120
タイトル : [NT]Y2K Update がサポートするコマンド ライン オプション

文書番号 : 413695
タイトル : W98: Y2K 修正モジュールで更新されるファイル (PC9800)

文書番号 : 413694
タイトル : W98:Y2K 修正モジュールで更新されるファイル (PC/AT)

文書番号 : 413267
タイトル : W98:Windows 98 Y2K Update に含まれるファイル

文書番号 : 413890
タイトル : W95:Y2K 修正モジュールで更新されるファイル (PC9800)

文書番号 : 231327
タイトル : W95: Y2K 修正モジュールで更新されるファイル (PC/AT)

注意

Windows 95 および Windows 98 の Y2K 修正モジュールでは、既にモジュールのバージョンが新しい場合など、お使いの環境によっては、ファイルが置換されない場合がありますが、動作には影響がありません。なお、ご不明な点などにつきましては、弊社下記該当窓口へお問い合わせください。
    マイクロソフト 2000 年対応インフォメーション センター    お客様がお持ちのマイクロソフト製品の対応状況および 2000 年問題への理解を    深めていただくための情報をお電話にてご案内いたしております。    TEL 03-5354-4626    受付時間  祝祭日をのぞく月曜日~金曜日      9:30 ~ 12:00、13:00 ~ 17:30   (この電話番号は、2000 年 3 月 31 日まで使用できます。)
電話番号は、必ずお確かめください。
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 225140(最終更新日 2000-01-28) をもとに作成したものです。

y2k MFC COleDateTime time_t OleDateFromTm
プロパティ

文書番号:225140 - 最終更新日: 02/01/2014 21:18:29 - リビジョン: 4.0

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive coledatetimespan kb2000 kbfix kbvs600sp3fix mfcinst vc42 vc4x vs60 y2kinfo.txt y2kw95.txt KB225140
フィードバック
ERROR: at System.Diagnostics.Process.Kill() at Microsoft.Support.SEOInfrastructureService.PhantomJS.PhantomJSRunner.WaitForExit(Process process, Int32 waitTime, StringBuilder dataBuilder, Boolean isTotalProcessTimeout)