你目前正处于脱机状态,正在等待 Internet 重新连接

C 运行时库中的 FIX: 夏令时错误

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

点击这里察看该文章的英文版: 214661
本文已归档。它按“原样”提供,并且不再更新。
症状
C 运行时库的日期/时间函数在计算过程夏时制时间 2001 年 4 月 1 开始的第一周中正确的时间可能会失败。在以下的一周之后的 bug 更正本身星期日。此错误与 2000 年问题。
原因
bug 是由 C 运行时库的 cvtdate helper 函数中的逻辑错误引起的。
状态
Microsoft 已经确认这是在本文开头列出的 Microsoft 产品中的错误。在 Visual Studio 6.0 Service Pack 3 中,此缺陷已得到纠正。有关 Visual Studio 的服务包的详细信息,请参阅 Microsoft 知识库中下面的文章:

194022 INFO: Visual Studio 6.0 Service Packs, What, Where, Why

194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed
更多信息

重现行为的步骤

下面的示例程序重新产生此问题:
// ----------------- start of sample program -------------------------// Compiler switches needed : none.#include <time.h>;#include <stdio.h>#include <stdlib.h>#include <stdarg.h>int main (){    struct tm ltm;    time_t tstamp = 0;    ltm.tm_year = 90;	/* First valid year .*/     ltm.tm_mon = 3;		/* April. */     ltm.tm_mday = 1;	/* 1st of the month. */     ltm.tm_hour = 3;	/* At 3:00 am. */     ltm.tm_min = 0;    ltm.tm_sec = 0;    ltm.tm_wday =0;    ltm.tm_yday = 0;    while (ltm.tm_year <= 2005)    {        ltm.tm_isdst = -1;	// mktime indirectly calls cvtdate which has the logic bug.	tstamp = mktime(&ltm);	/* If it's Sunday April 1st, it should also be DST */ 	if (!ltm.tm_wday && !ltm.tm_isdst)	{	    printf("April 01 is the first Sunday in April, %d  \             -it should be DST but tm_isdst says it's \             not!\n", 1900+ltm.tm_year);	    while (!ltm.tm_isdst)	    {		ltm.tm_mday++;		ltm.tm_isdst=-1;		tstamp = mktime(&ltm);	    }	    printf("\tDST is reported as starting on  \             %d/%d/%d\n", 1+ltm.tm_mon, ltm.tm_mday, \ 	    1900+ltm.tm_year);	            ltm.tm_mday = 1;	}	        ltm.tm_year++;	    }    return 0;}// ----------------- end  of sample program ---------------------------				
y2k year2000

属性

文章 ID:214661 - 上次审阅时间:02/23/2014 11:07:07 - 修订版本: 2.4

Microsoft Visual C++ 4.1 Subscription, Microsoft Visual C++ 4.2 企业版, Microsoft Visual C++ 5.0 企业版, Microsoft Visual C++ 6.0 企业版, Microsoft Visual C++ 4.2 专业版, Microsoft Visual C++ 5.0 专业版, Microsoft Visual C++ 6.0 专业版, Microsoft Visual C++, 32-bit Learning Edition 6.0

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcrt kbfix kbvs600sp3fix KB214661 KbMtzh
反馈