FIX: COleDateTime::operator=(time_t) Breaks 如果过去 1999 年

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

225140
本文已归档。它按“原样”提供,并且不再更新。
症状
函数 COleDateTime::operator =(const time_t& timeSrc) 不能正确处理日期晚于 1999 年十二月 31 日。例如对于 02/05/2000年可能会被表示为 02/05/100。

在 Windows 95/windows 98 诊断小程序 Msinfo32.exe 中,可以看到此错误。如果计算机上的日期晚于 1999 年十二月 31 日设置为 Msinfo32 生成的报告中的日期不正确显示。
原因
COleDateTime::operator = helper 函数在 MFC 中的名为 OleDateFromTm 的调用。将从 CRT 时间结构存储相对于 OLE 日期/时间转换函数期望 (例如对于 99 = 1999,100 = 2000) 1900 年转换为使用此函数。 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年之后显示错误日期
在 Visual Studio 6.0 Service Pack 3 中,此缺陷已得到纠正。有关 Visual Studio 的服务包的其他信息,请单击下面文章编号,以查看 Microsoft 知识库中相应的文章:
194022信息: Visual Studio 6.0 服务包、 内容,位置,为什么
194295HOWTO: 确定安装了 Visual Studio 6.0 服务包
更多信息
仅用 Visual c + + 4.0 或 4.1 生成的应用程序需要此更新后的 DLL。若要确定您的可执行文件是否链接到该 Mfc40.dll,请按照下列步骤操作:
  1. 启动 Windows 资源管理器。
  2. 用鼠标右键单击 EXE 或 DLL。
  3. 选择 快速查看
  4. 向下滚动到导入表。应该列出了 MFC DLL 在中链接在此处 (也就是 Mfc40.dll)。
y2k MFC COleDateTime time_t OleDateFromTm

警告: 本文已自动翻译

属性

文章 ID: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
反馈