FIX: Daylight Saving Time Bug nella libreria di runtime C

Il presente articolo è stato tradotto tramite il software di traduzione automatica di Microsoft e non da una persona. Microsoft offre sia articoli tradotti da persone fisiche sia articoli tradotti automaticamente da un software, in modo da rendere disponibili tutti gli articoli presenti nella nostra Knowledge Base nella lingua madre dell’utente. Tuttavia, un articolo tradotto in modo automatico non è sempre perfetto. Potrebbe contenere errori di sintassi, di grammatica o di utilizzo dei vocaboli, più o meno allo stesso modo di come una persona straniera potrebbe commettere degli errori parlando una lingua che non è la sua. Microsoft non è responsabile di alcuna imprecisione, errore o danno cagionato da qualsiasi traduzione non corretta dei contenuti o dell’utilizzo degli stessi fatto dai propri clienti. Microsoft, inoltre, aggiorna frequentemente il software di traduzione automatica.

Clicca qui per visualizzare la versione originale in inglese dell’articolo: 214661
Questo articolo è stato archiviato. L’articolo, quindi, viene offerto “così come è” e non verrà più aggiornato.
Sintomi
Le funzioni di data/ora C Runtime Library potrebbero non calcolare il tempo corretto durante la prima settimana dell'ora legale inizio 1 aprile 2001. Il bug si risolve dopo una settimana, sui seguenti domenica. Questo bug non è correlato al problema anno 2000.
Cause
Il bug è causato da un errore logico in funzione di supporto della libreria C Runtime cvtdate.
Status
Microsoft ha confermato che questo un bug nei prodotti Microsoft elencati all'inizio di questo articolo. Questo problema è stato risolto in Visual Studio 6.0 Service Pack 3. Per ulteriori informazioni sui service pack di Visual Studio, vedere i seguenti articoli della Microsoft Knowledge Base riportato di seguito:

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

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

Procedura per riprodurre il problema

Il programma di esempio riportato di seguito viene riprodotto il 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 ---------------------------				
year2000 anno 2000

Avviso: questo articolo è stato tradotto automaticamente

Proprietà

ID articolo: 214661 - Ultima revisione: 02/23/2014 11:07:06 - Revisione: 2.4

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

  • kbnosurvey kbarchive kbmt kbhotfixserver kbqfe kbbug kbcrt kbfix kbvs600sp3fix KB214661 KbMtit
Feedback