Condividi tramite


Panoramica del fuso orario

La TimeZoneInfo classe semplifica la creazione di applicazioni con riconoscimento del fuso orario. La TimeZone classe supporta l'uso del fuso orario locale e dell'ora UTC (Coordinated Universal Time). La TimeZoneInfo classe supporta entrambe queste zone e qualsiasi fuso orario relativo alle informazioni predefinite nel Registro di sistema. È anche possibile usare TimeZoneInfo per definire fusi orari personalizzati su cui il sistema non dispone di informazioni.

Informazioni di base sul fuso orario

Un fuso orario è un'area geografica in cui viene usata la stessa ora. In genere, ma non sempre, i fusi orari adiacenti sono separati da un'ora. L'ora in uno dei fusi orari del mondo può essere espressa come offset rispetto all'ora UTC (Coordinated Universal Time).

Molti fusi orari del mondo supportano l'ora legale. L'ora legale tenta di massimizzare le ore di luce avanzando l'ora in avanti di un'ora nella primavera o all'inizio dell'estate e tornando all'ora normale (o standard) alla fine dell'estate o autunno. Queste modifiche da e verso l'ora solare sono note come regole di regolazione.

La transizione da e verso l'ora legale in un particolare fuso orario può essere definita da una regola di regolazione fissa o mobile. Una regola di rettifica fissa imposta una data specifica in cui la transizione verso o dall'ora legale si verifica ogni anno. Ad esempio, una transizione dall'ora legale all'ora solare che si verifica ogni anno il 25 ottobre segue una regola di rettifica fissa. Molto più comuni sono le regole di regolazione mobile, che impostano un determinato giorno di una determinata settimana di un determinato mese per la transizione verso o dall'ora legale. Ad esempio, una transizione dall'ora solare all'ora legale che si verifica la terza domenica di marzo segue una regola di regolazione mobile.

Per i fusi orari che supportano le regole di regolazione, la transizione da e verso l'ora legale crea due tipi di orari anomali: orari non validi e orari ambigui. Un'ora non valida è un'ora inesistente creata dalla transizione dall'ora solare all'ora legale. Ad esempio, se questa transizione si verifica in un determinato giorno alle 2:00 e fa sì che l'ora venga modificata alle 3:00, ogni intervallo di tempo compreso tra le 2:00 e le 2:59:59:59 A.M. non è valido. Un'ora ambigua è un'ora che può essere associata a due momenti diversi in un singolo fuso orario. Viene creato dalla transizione dall'ora legale all'ora solare. Ad esempio, se questa transizione si verifica in un determinato giorno alle 2:00 e fa sì che l'ora venga modificata alle 1:00, ogni intervallo di tempo compreso tra le 1:00 e le 1:59:59.59 può essere interpretato come ora solare o ora legale.

Terminologia del fuso orario

La tabella seguente definisce i termini comunemente usati quando si usano fusi orari e si sviluppano applicazioni con riconoscimento del fuso orario.

Termine Definizione
Regola di adattamento Regola che definisce quando si verifica la transizione dall'ora solare all'ora legale e al ritorno dall'ora legale all'ora solare. Ogni regola di rettifica ha una data di inizio e di fine che definisce quando la regola è in vigore (ad esempio, la regola di rettifica è in vigore dal 1° gennaio 1986 al 31 dicembre 2006), un delta (la quantità di tempo in base alla quale l'ora solare cambia a seguito dell'applicazione della regola di rettifica) e informazioni sulla data e l'ora specifiche che le transizioni devono verificarsi durante il periodo di rettifica. Le transizioni possono seguire una regola fissa o una regola mobile.
Ora ambigua Un momento che può essere associato a due diversi istanti in un singolo fuso orario. Si verifica quando l'ora dell'orologio viene regolata di nuovo nell'ora, ad esempio durante la transizione dall'ora legale di un fuso orario all'ora solare. Ad esempio, se questa transizione si verifica in un determinato giorno alle 2:00 e fa sì che l'ora venga modificata alle 1:00, ogni intervallo di tempo compreso tra le 1:00 e le 1:59:59.59 può essere interpretato come ora solare o ora legale.
Regola fissa Regola di regolazione che imposta una data specifica per la transizione da o verso l'ora legale. Ad esempio, una transizione dall'ora legale all'ora solare che si verifica ogni anno il 25 ottobre segue una regola di rettifica fissa.
Regola flottante Regola di rettifica che imposta un determinato giorno di una determinata settimana di un determinato mese per la transizione verso o dall'ora legale. Ad esempio, una transizione dall'ora solare all'ora legale che si verifica la terza domenica di marzo segue una regola di regolazione mobile.
Ora non valida Ora inesistente che rappresenta un artefatto della transizione dall'ora solare all'ora legale. Si verifica quando l'ora dell'orologio viene modificata in avanti nell'ora, ad esempio durante la transizione dall'ora solare di un fuso orario all'ora legale. Ad esempio, se questa transizione si verifica in un determinato giorno alle 2:00 e fa sì che l'ora venga modificata alle 3:00, ogni intervallo di tempo compreso tra le 2:00 e le 2:59:59:59 A.M. non è valido.
Tempo di transizione Informazioni su una modifica specifica dell'ora, ad esempio la modifica dall'ora legale all'ora solare o viceversa, in un particolare fuso orario.

Fusi orari e classe TimeZoneInfo

In .NET un TimeZoneInfo oggetto rappresenta un fuso orario. La TimeZoneInfo classe include un GetAdjustmentRules metodo che restituisce una matrice di TimeZoneInfo.AdjustmentRule oggetti. Ogni elemento di questa matrice fornisce informazioni sulla transizione da e verso l'ora legale per un determinato periodo di tempo. Per i fusi orari che non supportano l'ora legale, il metodo restituisce una matrice vuota. Ogni TimeZoneInfo.AdjustmentRule oggetto ha una DaylightTransitionStart proprietà e DaylightTransitionEnd che definisce la data e l'ora specifiche della transizione da e verso l'ora legale. La IsFixedDateRule proprietà indica se la transizione è fissa o mobile.

.NET si basa sulle informazioni sul fuso orario fornite dal sistema operativo Windows e archiviate nel Registro di sistema. A causa del numero dei fusi orari della terra, non tutti i fusi orari esistenti sono rappresentati nel Registro di sistema. Inoltre, poiché il Registro di sistema è una struttura dinamica, è possibile aggiungere o rimuovere fusi orari predefiniti da esso. Infine, il Registro di sistema non contiene necessariamente dati cronologici del fuso orario. Ad esempio, in Windows XP il Registro di sistema contiene dati relativi solo a un singolo set di regolazioni del fuso orario. Windows Vista supporta i dati dinamici del fuso orario, il che significa che un singolo fuso orario può avere più regole di regolazione applicabili a intervalli specifici di anni. Tuttavia, la maggior parte dei fusi orari definiti nel Registro di sistema di Windows Vista e supporta l'ora legale ha solo una o due regole di regolazione predefinite.

La dipendenza della TimeZoneInfo classe nel Registro di sistema indica che un'applicazione con riconoscimento del fuso orario non può essere certa che un particolare fuso orario sia definito nel Registro di sistema. Di conseguenza, il tentativo di istanziare un fuso orario specifico (che non sia il fuso orario locale o quello che rappresenta l'UTC) dovrebbe gestire le eccezioni. Deve inoltre fornire un metodo per consentire all'applicazione di continuare se non è possibile creare un'istanza di un oggetto richiesto TimeZoneInfo dal registro.

Per gestire l'assenza di un fuso orario necessario, la TimeZoneInfo classe include un CreateCustomTimeZone metodo, che è possibile usare per creare fusi orari personalizzati non trovati nel Registro di sistema. Per informazioni dettagliate sulla creazione di un fuso orario personalizzato, vedere Procedura: Creare fusi orari senza regole di regolazione e Procedura: Creare fusi orari con regole di regolazione. È anche possibile usare il ToSerializedString metodo per convertire un fuso orario appena creato in una stringa e salvarlo in un archivio dati, ad esempio un database, un file di testo, il Registro di sistema o una risorsa dell'applicazione. È quindi possibile utilizzare il FromSerializedString metodo per convertire nuovamente questa stringa in un TimeZoneInfo oggetto . Per informazioni dettagliate, vedere Procedura: Salvare fusi orari in una risorsa incorporata e Procedura: Ripristinare fusi orari da una risorsa incorporata.

Poiché ogni fuso orario è caratterizzato da una differenza di base rispetto all'ora UTC, nonché da un offset rispetto all'ora UTC che riflette le regole di regolazione esistenti, un'ora in un fuso orario può essere facilmente convertita nell'ora in un altro fuso orario. A questo scopo, l'oggetto TimeZoneInfo include diversi metodi di conversione, tra cui:

  • ConvertTimeFromUtc, che converte l'ora UTC nell'ora in un fuso orario designato.

  • ConvertTimeToUtc, che converte l'ora in un fuso orario designato in formato UTC.

  • ConvertTime, che converte l'ora in un fuso orario designato in quella di un altro fuso orario designato.

  • ConvertTimeBySystemTimeZoneId, che usa gli identificatori del fuso orario (anziché gli TimeZoneInfo oggetti) come parametri per convertire l'ora in un fuso orario designato nell'ora in un altro fuso orario designato.

Per informazioni dettagliate sulla conversione di orari tra fusi orari, vedere Conversione di orari tra fusi orari.

Vedere anche