Come gestire le date e gli orari in cui includere l'ora legale

INTRODUZIONE

Gli sviluppatori che scrivono applicazioni che gestiscono le date e ore potrebbero utilizzare uno o più tecnologie per l'esecuzione di manipolazione di data e la modifica di tempo. In particolare, alcune API di sistema operativo base, il runtime di C (CRT) e di Microsoft.NET Framework può convertire o in caso contrario modificare date e ore. In questo articolo vengono descritti alcuni dei concetti generali che sono coinvolti nella gestione delle date e ore. Inoltre, in questo articolo viene descritto l'effetto delle modifiche dell'ora legale (DST) 2007 su determinati prodotti e tecnologie.

Ulteriori informazioni

La modifica e archiviazione ora

Timestamp sono valori che specificano una combinazione di data e ora. Le applicazioni che devono gestire timestamp in genere memorizzano i timestamp nel tempo universale coordinato (UTC). Il vantaggio dell'ora UTC è che ora UTC universal. UTC è non soggetta al fuso orario locale o all'ora legale. Tuttavia, ora UTC è intuitivo né rilevanti per la maggior parte degli utenti. Sebbene l'ora UTC è la scelta più ovvia per l'archiviazione, non si tratta di una buona scelta per la visualizzazione. Pertanto, gran parte delle applicazioni convertire ora UTC in ora locale prima di visualizzare il timestamp all'utente. Ad esempio, Esplora risorse di Windows applica il fuso orario e l'impostazione dell'ora legale per il timestamp UTC prima di visualizzare date e ore dei file in una directory di Windows NT File System (NTFS).

Conversione dall'ora UTC nell'ora locale può essere considerata come due offset l'applicazione. Il primo è l'offset del fuso orario e il secondo è l'offset dell'ora legale. Pertanto, ora locale è effettivamente ora UTC più un offset del fuso orario, più offset qualsiasi applicabile all'ora legale. Offset del fuso orario è piuttosto semplice. Il computer è configurato per un particolare fuso orario, il fuso orario è un offset dall'ora UTC. Per determinare se deve essere applicato un offset dell'ora legale è molto più complesso. Questa attività si basa sul numero di regole che sono complessi e dinamici.

Tali regole DST complesse sono recentemente cambiati con ora legale 2007. A partire da 2007, negli Stati Uniti ha adottato i nuove date di inizio e nuove date di fine dell'ora legale. Inoltre, è comune per gli altri paesi e governi di modificare regolarmente le date di inizio e di fine dell'ora legale in fusi orari che sono sotto il suo controllo. Nella sezione seguente vengono descritti gli effetti della modifica dell'ora legale 2007 per i prodotti di sviluppo.

Per ulteriori informazioni sull'ora legale 2007, visitare il seguente sito Web Microsoft:

Effetti dell'ora legale 2007 sulle tecnologie relative agli sviluppatori

Windows

In Windows Update e Microsoft Update, gli aggiornamenti sono disponibili che consentono di Windows applicare correttamente le modifiche dell'ora legale 2007 e per gli anni successivi. Dopo avere applicati gli aggiornamenti, Windows calcola correttamente gli offset correnti dall'ora UTC in ora locale quando il computer passa attraverso l'ora legale. Gli offset sono gli offset per le API di base e per le API di rete relative all'ora.

Per ulteriori informazioni, fare clic sul seguente numero di articolo per visualizzare l'articolo della Microsoft Knowledge Base:

Aggiornamento di dicembre 2007 942763 cumulativo dei fusi per Microsoft Windows sistemi operativi

Runtime di C (CRT)

CRT esegue anche le traduzioni di data e le conversioni dell'ora. Pertanto, la CRT inoltre deve essere aggiornata per includere le nuove regole per l'ora legale 2007. CRT esegue gestisce il proprio tempo solo quando è impostata la variabile di ambiente TZ o quando una chiamata di tempo API del sistema operativo sottostante non. Gli aggiornamenti sono disponibili per il CRT inclusi in ogni versione di Microsoft Visual Studio e anche per vi inclusi in Windows. Questi aggiornamenti consentono CRT per continuare a gestire correttamente le conversioni dell'ora legale nel fuso orario degli Stati Uniti.

Il.NET Framework

Il.NET Framework si basa sulle chiamate del sistema operativo sottostante. Di conseguenza, il comportamento di.NET Framework riflette lo stato del sistema operativo sottostante. È necessario alcun aggiornamento separato.

Ambienti di sviluppo (IDE) integrati in Visual Studio .NET

Ambienti di sviluppo integrati di Visual Studio .NET includono versioni 2002, 2003 e 2005 di Microsoft Visual C++, Microsoft Visual C# e Microsoft Visual Basic. Questi prodotti sono interessati solo perché includono CRT. Non IDE specifici sono necessari aggiornamenti.

Visual Studio 2005 Team Foundation Server

Visual Studio 2005 Team Foundation Server si basa sul sistema operativo sottostante per le conversioni di data e ora. Pertanto, Visual Studio 2005 Team Foundation Server presenta lo stesso comportamento del sistema operativo. Visual Studio 2005 Team Foundation Server si basa inoltre su Microsoft SQL Server, SQL Server Reporting Services e Windows SharePoint Services. I computer devono essere aggiornati con gli aggiornamenti rilevanti per il sistema operativo, SQL Server e Windows SharePoint Services. Tutti gli aggiornamenti pertinenti devono essere applicati contemporaneamente su tutti i computer interessati. Nessun aggiornamento di Visual Studio 2005 Team Foundation Server separato è necessario.

Visual Studio 2005 Team System

Visual Studio 2005 Team System è interessato tramite il sistema operativo, Visual Studio 2005 Team Foundation Server e CRT. Nessun aggiornamento di Visual Studio 2005 Team System separato è necessario.

Visual SourceSafe

Per ulteriori informazioni sui problemi di Visual SourceSafe legale nel 2007, fare clic sul numero riportato di seguito per visualizzare l'articolo della Microsoft Knowledge Base riportato di seguito:

Problemi relativi all'ora legale di visual SourceSafe 931804 2007

Runtime di Visual Basic 6.0

Il runtime di Visual Basic 6.0 non è interessato.

Visual C++ 6.0

Visual C++ 6.0 non è più supportato.

Per ulteriori informazioni, visitare il seguente sito Web Microsoft:

Windows Software Development Kit (SDK) per Windows Vista



Questo SDK contiene una versione di CRT che è interessata dalle modifiche dell'ora legale 2007. Come parte dell'installazione di questo SDK, è possibile installare Visual Studio 2005 CRT sui computer che non dispone già di tale versione di CRT installata. Se è già installata una versione più recente di CRT, l'installazione di SDK non sovrascrive la versione più recente. Quando si disinstalla il SDK, la versione più recente di CRT viene lasciata nel computer. Si può installare l'aggiornamento di Visual Studio 2005 CRT prima o dopo aver installato il SDK.

Windows SDK per Windows Vista viene installato anche un insieme di moduli unione (file MSM) per Visual Studio 2005 CRT per la ridistribuzione di CRT come parte delle applicazioni C++ personalizzate. Un'applicazione che distribuisce il ridistribuibile CRT alla cartella di installazione dell'applicazione è necessario distribuire CRT aggiornata dell'aggiornamento di Visual Studio 2005 CRT anziché i file msm CRT di Windows SDK per Windows Vista. Un'applicazione che distribuisce l'aggiornamento di Visual Studio 2005 CRT ridistribuibile alla cartella di installazione di Windows è necessario applicare l'aggiornamento ridistribuibile di Visual Studio 2005 CRT a tali computer.

Platform SDK per Microsoft Windows Server 2003 R2

Questo SDK contiene una versione di CRT che è interessata dalle modifiche dell'ora legale 2007. I clienti devono seguire le note sulla versione per questo SDK e utilizzare gli aggiornamenti di Visual Studio 2005 CRT se sono necessarie.

Il.NET Framework 2.0 SDK

Questo SDK contiene una versione di CRT che è interessata dalle modifiche dell'ora legale 2007. Come parte dell'installazione di questo SDK, è possibile installare Visual Studio 2005 CRT sui computer che non dispone già di tale versione di CRT installata. Se è già installata una versione più recente di CRT, l'installazione di SDK non sovrascrive la versione più recente. Quando si disinstalla il SDK, la versione più recente di CRT viene lasciata nel computer. Si può installare l'aggiornamento di Visual Studio 2005 CRT prima o dopo aver installato il SDK.

Conversione ora locale in Windows

Le applicazioni in genere convertire ora UTC in ora locale prima di visualizzare le informazioni di ora e data all'utente. Windows fornisce numerose API per le applicazioni da utilizzare per la manipolazione di timestamp.
  • La funzione GetSystemTime() e GetSystemTimeAsFileTime() ottenere l'ora UTC corrente in una struttura SYSTEMTIME o in una struttura FILETIME.
  • La funzione GetLocalTime() consente di ottenere l'ora locale corrente in una struttura SYSTEMTIME.
  • La funzione GetTimeZoneInformation Ottiene una struttura TIME_ZONE_INFORMATION che descrive il fuso orario corrente e l'impostazione dell'ora legale per il computer.
  • La funzione SystemTimeToFileTime () e la funzione FileTimeToSystemTime() il marshalling tra strutture SYSTEMTIME e FILETIME.
  • La funzione FileTimeToLocalFileTime() e LocalFileTimeToFileTime() , convertire e traslare una struttura FILETIME tra ora UTC e ora locale utilizzando il fuso orario corrente e l'impostazione dell'ora legale del computer.
  • La funzione SystemTimeToTzSpecificLocalTime() e la funzione TzSpecificTimeToSystemTime() consente di convertire una struttura SYSTEMTIME locale un timestamp UTC in una struttura SYSTEMTIME. Queste funzioni utilizzano una struttura TIME_ZONE_INFORMATION che specifica la data di inizio e la data di fine dell'ora legale. Per impostazione predefinita, le regole dell'ora legale corrente vengono utilizzate quando questa struttura non viene fornita.
  • La funzione NetRemoteTOD() Ottiene l'ora da un server remoto utilizzando le informazioni e le impostazioni del server.
Nota: La funzione FileTimeToLocalFileTime() e LocalFileTimeToFileTime() di eseguire la conversione tra ora UTC e ora locale utilizzando solo le informazioni sul fuso orario corrente e le informazioni relative all'ora legale. Questa conversione viene eseguita indipendentemente dal timestamp da convertire.

Per un esempio di questo comportamento in Windows Explorer, eseguire la procedura su un computer che si trova in un fuso orario che utilizza l'ora legale.

Si tenga presente che queste operazioni richiedono che si modifica il clock di sistema. Pertanto, occorre chiudere tutte le applicazioni, quali le applicazioni di calendario, che possono reagire a tali modifiche in fase di prima di eseguire la procedura.
  1. Modificare la data del computer a un giorno all'ora legale. Ad esempio, impostare la data 1 luglio 2006.
  2. In una directory NTFS nello stesso computer, creare un nuovo file di testo denominato test. txt.
  3. Si noti che il timestamp del file viene visualizzato come segue in Esplora risorse:
    7/1/2006 3:37pm
  4. Modificare la data del computer a un giorno senza ora legale. Ad esempio, impostare la data 1 febbraio 2007.
  5. Aggiornare la finestra di Esplora risorse.
  6. Si noti che il timestamp del file viene visualizzato come segue in Esplora risorse:
    7/1/2006 2:37pm
Nell'esempio precedente, il timestamp UTC del file non cambia. Tuttavia, le regole che vengono utilizzate per convertire il timestamp in un'ora locale variano in base alla data corrente sul computer. Nel passaggio 3, è stato applicato un offset dell'ora legale in quanto il 1 ° luglio è compresa nell'intervallo dell'ora legale. Nel passaggio 6, è non stato applicato alcun offset dell'ora legale, in quanto il 1 ° febbraio non rientra nell'intervallo dell'ora legale. Questo comportamento si verifica in modo che il timestamp del file può essere convertito in modo deterministico in ora locale e l'ora locale.

Per ulteriori informazioni, vedere il blog:Il metodo SystemTimeToTzSpecificLocalTime() e il metodo TzSpecificTimeToSystemTime() conversione tra ora UTC e l'ora locale utilizzando la struttura TIME_ZONE_INFORMATION fornita. Se viene fornita alcuna informazione di fuso orario, queste funzioni utilizzano le regole di fuso orario corrente e il timestamp è necessario applicare le regole dell'ora legale per determinare se un offset dell'ora legale. Questo è funzionalmente equivalente alla chiamata del metodo GetTimeZoneInformation per ottenere la struttura TIME_ZONE_INFORMATION che è attiva.

La struttura TIME_ZONE_INFORMATION include la data di inizio e la data di fine dell'ora legale. Pertanto, quando la struttura TIME_ZONE_INFORMATION utilizza le informazioni sul fuso orario corrente, struttura TIME_ZONE_INFORMATION può introdurre un'imprecisione storica. Questo comportamento può verificarsi se le informazioni sul fuso orario corrente e le informazioni relative all'ora legale non riflettono il timestamp da convertire. Questo comportamento è influenzato dall'ora legale 2007 solo perché sono state modificate le regole che determinano le date quando l'ora legale inizia e termina.

Per ottenere conversioni cronologicamente accurate da queste funzioni, un'applicazione deve fornire una struttura TIME_ZONE_INFORMATION cronologicamente accurata quando l'applicazione chiama queste funzioni.

Fuso orario dinamici in Windows

Windows Vista introduce dinamiche dell'ora legale fuso orario. DST dinamico fornisce il supporto per i fusi orari di anno in anno verranno modificati i cui limiti dell'ora legale. Tali regole sono memorizzate nel Registro di sistema. Le applicazioni è possono richiedere le regole utilizzando la funzione GetDynamicTimeZoneInformation() .

Dynamic fusi orari attivare l'aggiornamento più semplice di computer, soprattutto per le impostazioni locali in cui i limiti dell'ora legale annuali sono conosciuti in anticipo. Per ulteriori informazioni sulla struttura DYNAMIC_TIME_ZONE_INFORMATION in Windows SDK per Vista, visitare il seguente sito Web Microsoft Developer Network (MSDN):

Conversione ora locale nel runtime di C (CRT)

CRT è fondamentalmente tre modalità in cui è possibile tradurre timestamp:
  • Se non è impostata la variabile di ambiente TZ, CRT chiama le API di Windows e comportamento di Windows come descritto in questo articolo.
  • Se è impostata la variabile di ambiente TZ, CRT esegue il proprio conversioni basate su tale impostazione. Aggiornamento CRT in modo che rispetta le nuove regole dell'ora legale 2007 quando esegue conversioni in questo scenario.
  • Se non è impostata la variabile di ambiente TZ, ma le API di Windows sottostante di esito negativo, CRT al propria conversioni, utilizzando un valore di PST8PDT per la variabile di ambiente TZ.
CRT contiene la logica personalizzata per la conversione UTC in ora locale. Le applicazioni possono ottenere il timestamp UTC da funzioni come la funzione time . Questi timestamp UTC vengono memorizzati valori time_t . Conversione nell'ora locale può essere eseguita con una funzione come la funzione localtime_s() . La funzione localtime_s() popola una struttura tm definito nel file di intestazione Time.h. La struttura di tm si basa sul fuso orario definito nella variabile di ambiente TZ e alle regole che sono attive al momento del timestamp dell'ora legale.

Nota: Questa conversione segue regole specifiche per Stati Uniti.

Prima di applicare l'aggiornamento dell'ora legale 2007, CRT gestisce correttamente i timestamp corrente in fusi orari degli Stati Uniti. Dopo avere applicato l'aggiornamento dell'ora legale 2007, CRT gestisce inoltre le passate e future date negli Stati Uniti. Gli aggiornamenti per CRT sono elencati nella sezione "Riferimenti".

Conversione di.NET Framework ora locale

Il.NET Framework contiene classi che archiviano e convertire timestamp. Queste classi includono la classe DateTime , la classe TimeZone , la classe TimeSpan e la classe DateTimeKind . Come sottolineato in precedenza, queste classi dipendono principalmente dall'implementazione della piattaforma sottostante. Queste classi presentano lo stesso comportamento delle API del sistema operativo sottostante.

Una caratteristica interessante esposti dalle classi di.NET Framework Data e ora classi si riferisce alle funzioni che il timestamp di offset dalla quantità richiesta. Si consideri, ad esempio, la funzione AddHours() , la funzione AddMinutes() e la funzione AddSeconds() nella classe DateTime . Queste funzioni e funzioni denominate allo stesso modo, semplicemente incrementato il timestamp dell'importo richiesto senza tener conto per le impostazioni dell'ora legale. Questo comportamento può essere considerato semplici operazioni aritmetiche su timestamp UTC sottostante. Tuttavia, questo comportamento potrebbe portare a risultati imprevisti quando l'aggiunta comporta il timestamp passare in o da ora legale. Questo comportamento non è correlato alle modifiche dell'ora legale 2007.

Consigli

I seguenti suggerimenti possono aiutare gli sviluppatori ridurre al minimo l'effetto dell'ora legale 2007 e miglioramento generale delle date e la gestione di tempo.
  • È necessario pianificare per l'installazione degli aggiornamenti dell'ora legale 2007 vicino atomiche. Tutti gli aggiornamenti dell'ora legale 2007 pianificati devono essere applicati come chiusura nel tempo l'uno a altro possibile. Se un computer in cui è stato aggiornato tenta di utilizzare metodi di query SQL o servizi Web per comunicare con un computer che non è stato aggiornato, possono verificarsi errori di traduzione. Analogamente, se un singolo computer richiede due o più aggiornamenti, ad esempio l'aggiornamento di Windows e l'aggiornamento di CRT, gli aggiornamenti da applicare allo stesso tempo.
  • Timestamp UTC sono cronologicamente accurati. È in genere la conversione nell'ora locale che riguarda gran parte delle applicazioni. Le applicazioni dovrebbero memorizzare sempre UTC timestamp. Le conversioni nell'ora locale per scopi di visualizzazione richiedono informazioni di fuso orario e dell'ora legale. Queste informazioni possono provenire da origini diverse:
    • L'applicazione può utilizzare il fuso orario corrente e l'impostazione dell'ora legale per la conversione. Se il fuso orario corrente e l'impostazione dell'ora legale non erano in vigore al momento del timestamp, questo potrebbe introdurre un'imprecisione nella conversione.
    • L'applicazione può memorizzare le informazioni di fuso orario in precedenza accurate e DST oltre il timestamp UTC.
    • Quando dinamici fusi orari sono disponibili, l'applicazione può utilizzare dinamici fusi orari per determinare quali informazioni sul fuso orario deve essere applicati a un particolare timestamp UTC. Questa opzione è disponibile solo quando le informazioni di fuso orario dinamici sono disponibili per un timestamp specifico e per un fuso orario specifico.
    • L'applicazione può archiviare un timestamp locale e il timestamp UTC. Questo metodo impedisce la necessità di conversione futura.
  • Le comunicazioni tra computer che gestiscono i timestamp devono utilizzare timestamp UTC. Questa operazione in modo implicito fornisce entrambi i computer le stesse informazioni di contesto per l'ora UTC.
  • Se un'applicazione gestisce le date, è necessario prestare attenzione con modalità di gestione delle date nei test. Le date che vengono visualizzate senza informazioni sull'ora in genere vengono memorizzate come un timestamp di 12:00 AM alla data considerata. Pertanto, un errore esterno a uno nella parte ora del timestamp potrebbe causare un risultato off-by-one nella data di validità se il tempo viene spostato a 11:00 PM il giorno precedente.

Riferimenti

Per ulteriori informazioni sul portale dell'ora legale 2007 Microsoft, visitare il seguente sito Web Microsoft:http://support.microsoft.com/gp/cp_dstPer ulteriori informazioni, fare clic sui numeri per visualizzare gli articoli della Microsoft Knowledge Base riportato di seguito:

Aggiornamento di dicembre 2007 942763 cumulativo dei fusi per Microsoft Windows sistemi operativi

931975 sulla preparazione di SQL Server 2005 e SQL Server 2000 per le modifiche all'ora legale nel 2007

Problemi relativi all'ora legale di visual SourceSafe 931804 2007

Per ulteriori informazioni, visitare i seguenti siti Web Microsoft Developer Network (MSDN):Per ottenere gli aggiornamenti dell'ora legale 2007 per il runtime di C (CRT), fare clic sui numeri per visualizzare gli articoli della Microsoft Knowledge Base riportato di seguito:
932305 FIX: aggiornamento dell'ora legale 2007 di runtime C di Visual C++ .NET 2002 per il problema di variabili di ambiente TZ

932304 FIX: aggiornamento dell'ora legale 2007 runtime di Visual C++ .NET 2002 Service Pack 1 C per il problema di variabili di ambiente TZ

932299 FIX: aggiornamento dell'ora legale 2007 di runtime C di Visual C++ .NET 2003 per il problema di variabili di ambiente TZ

932298 FIX: aggiornamento dell'ora legale 2007 runtime di Visual C++ .NET 2003 Service Pack 1 C per il problema di variabili di ambiente TZ

932392 FIX: aggiornamento dell'ora legale 2007 di runtime C di Visual C++ .NET 2005 per la variabile di ambiente TZ

932391 FIX: aggiornamento dell'ora legale 2007 runtime di Visual C++ .NET 2005 Service Pack 1 C per la variabile di ambiente TZ

932590 FIX: applicazioni Windows che utilizzano la variabile di ambiente TZ non funzionino come previsto a causa di modifiche all'ora legale

Proprietà

ID articolo: 932955 - Ultima revisione: 31 gen 2017 - Revisione: 1

Feedback