CORRECÇÃO: erro de horário de verão na biblioteca de tempo de execução C

Traduções deste artigo Traduções deste artigo
ID do artigo: 214661 - Exibir os produtos aos quais esse artigo se aplica.
Este artigo foi arquivado. É oferecido "como está" e não será mais atualizado.
Expandir tudo | Recolher tudo

Neste artigo

Sintomas

As funções de data/hora biblioteca C Run-time podem falhar calcular a hora correta durante a primeira semana do horário de verão começando 1 de abril de 2001. Corrige o erro próprio após uma semana, no seguinte domingo. Esse bug não está relacionado ao problema do ano 2000.

Causa

O erro é causado por um erro de lógica na função de auxiliar cvtdate da biblioteca C Run-time.

Situação

A Microsoft confirmou que esse é um problema nos produtos da Microsoft listados no começo deste artigo. Esse bug foi corrigido no Visual Studio 6.0 Service Pack 3. Para obter mais informações sobre service packs do Visual Studio, consulte os seguintes artigos na Base de dados de Conhecimento da Microsoft:

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

194295 HOWTO: Tell That Visual Studio 6.0 Service Packs Are Installed

Mais Informações

Etapas para reproduzir o problema

O seguinte programa de exemplo reproduz o problema:

// ----------------- 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 ---------------------------
				

Referências

Propriedades

ID do artigo: 214661 - Última revisão: domingo, 23 de fevereiro de 2014 - Revisão: 2.4
A informação contida neste artigo aplica-se a:
  • Microsoft Visual C++ 4.1 Subscription
  • Microsoft Visual C++ 4.2 Enterprise Edition
  • Microsoft Visual C++ 5.0 Enterprise Edition
  • Microsoft Visual C++ 6.0 Enterprise Edition
  • Microsoft Visual C++ 4.2 Professional Edition
  • Microsoft Visual C++ 5.0 Professional Edition
  • Microsoft Visual C++ 6.0 Professional Edition
  • Microsoft Visual C++, 32-bit Learning Edition 6.0
Palavras-chave: 
kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcrt kbfix kbvs600sp3fix KB214661 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine Translation ou MT), não tendo sido portanto traduzido ou revisto por pessoas. A Microsoft possui artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais, com o objetivo de oferecer em português a totalidade dos artigos existentes na base de dados de suporte. No entanto, a tradução automática não é sempre perfeita, podendo conter erros de vocabulário, sintaxe ou gramática. A Microsoft não é responsável por incoerências, erros ou prejuízos ocorridos em decorrência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza atualizações freqüentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 214661

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com