您目前已離線,請等候您的網際網路重新連線

FIX: COleDateTime::operator=(time_t) 中斷如果過去的 1999年的年份

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:225140
本文已封存。本文係以「現狀」提供且不會再更新。
徵狀
函式 COleDateTime::operator =(const time_t& timeSrc) 不正確地處理日期晚於 1999年 12 月 31日。比方說 02/05/2000年可能可表示為 02/05/100。

這個 Bug 可以看到在 Windows 95/Windows 98 診斷小程式項中。如果在電腦上的日期設在晚於 「 1999 12 月 31,Msinfo32 產生的報告中的日期會不正常顯示。
發生的原因
COleDateTime::operator = 呼叫 Helper 函式在 MFC 中名為 OleDateFromTm。這個函式用來儲存 OLE 日期/時間轉換函式預期 1900 (比方說 99 = 1999,100 = 2000) 相對於年 CRT 時間結構從轉換。 OleDateFromTm 假設,任何年份傳遞給該是小於 100 是縮寫的日期相對於 1900年,並將 1900年加入至它。如果年份超過 99 (也就是 100 = 2000) 執行任何動作就會加入。因此,當 100 (針對 2000) 傳遞至 OleDateFromTm,執行任何動作會加入至它,並且在日期是來自回為 100。
狀況說明
Microsoft 已確認這是在本文開頭所列之 Microsoft 產品中的有錯誤。

這個 Bug 已修正在 Mfc40.dll 和 Mfc40u.dll 的版本中已經安裝補充程式。版本號碼是 4.1.6140。這些 DLL 會包含在內,如 [Y2K 部分更新的 Windows 95 和 Windows 98。Windows NT 4.0 熱修正程式使用。

如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
218877Mfc40.dll 會造成程式顯示錯誤 01/01/2000年之後的日期
這個 Bug 已經在 Visual Studio 6.0 Service Pack 3 中獲得修正。取得更多資訊有關 Visual Studio Service Pack 按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中 「 文件:
194022資訊: Visual Studio 6.0 服務封裝什麼、 何處,為何
194295HOWTO: 告訴安裝 Visual Studio 6.0 Service Pack
其他相關資訊
只使用 Visual C++ 4.0 或 4.1 所建置的應用程式需要此更新的 DLL。如果要判斷是否可執行檔連結到 [Mfc40.dll,請依照下列步驟執行:
  1. 啟動 Windows 檔案總管]。
  2. 以滑鼠右鍵按一下執行檔或 DLL。
  3. 選取 快速檢視
  4. 向下捲動至匯入資料表]。在連結的 MFC DLL 應該會列出這裡 (也就是 Mfc40.dll)。
y2k MFC COleDateTime time_t OleDateFromTm

警告:本文為自動翻譯

內容

文章識別碼:225140 - 最後檢閱時間:10/20/2013 22:44:51 - 修訂: 2.1

Microsoft Foundation Class Library 4.2

  • kbnosurvey kbarchive kbmt kbbug kbfaq kbfix kbnoupdate kbvs600sp3fix KB225140 KbMtzh
意見反應