Panoramica sui fusi orari

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 nella quale si usa la stessa ora. In genere, ma non sempre, i fusi orari adiacenti hanno un'ora di differenza. L'ora in un qualsiasi fuso orario del mondo può essere espressa come scostamento rispetto all'ora Coordinated Universal Time (UTC).

Molti fusi orari del mondo supportano l'ora legale. L'ora legale ha lo scopo di massimizzare le ore di luce diurna, con uno spostamento in avanti di un'ora in primavera o a inizio estate e con il ripristino dell'ora normale o solare a fine estate o inizio autunno. Queste modifiche rispetto all'ora solare sono note come regole di rettifica.

La transizione alla e dall'ora legale in un determinato fuso orario può essere definita da una regola di rettifica fissa o mobile. Una regola di rettifica fissa imposta una determinata data in cui si verifica ogni anno la transizione alla o dall'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. Le regole di rettifica mobili, molto più comuni, impostano un determinato giorno di una determinata settimana di un determinato mese per la transizione alla o dall'ora legale. Ad esempio, una transizione dall'ora solare all'ora legale che si verifica la terza domenica del mese di marzo segue una regola di rettifica mobile.

Per i fusi orari che supportano le regole di rettifica, la transizione alla e dall'ora legale crea due tipi di ore anomale: le ore non valide e le ore ambigue. 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.M. non è valido. Un'ora ambigua è un'ora che può essere mappata su due ore diverse in un singolo fuso orario. Viene creata con la 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 cambi alle 1:00, ogni intervallo di tempo compreso tra le 1:00 e le 1:59:59.59.M. può essere interpretato come un'ora solare o un'ora legale.

Terminologia del fuso orario

Nella tabella seguente sono definiti termini usati comunemente quando si lavora con i fusi orari e si sviluppano applicazioni che rilevano il fuso orario.

Termine Definizione
Regola di rettifica Regola che definisce quando si verifica la transizione dall'ora solare all'ora legale e viceversa. Ogni regola di rettifica ha una data di inizio e di fine che definisce quando la regola è in atto (ad esempio, la regola di rettifica è in atto dal 1° gennaio 1986 al 31 dicembre 2006), un delta (intervallo di tempo in base al quale l'ora standard cambia a seguito dell'applicazione della regola di rettifica) e informazioni sulla data e l'ora specifiche in cui si verificano le transizioni durante il periodo di rettifica. Le transizioni possono seguire una regola fissa o una regola mobile.
Ora ambigua Ora che può essere mappata su due ore diverse in un singolo fuso orario. Si verifica quando l'orologio viene riportato indietro, ad esempio durante la transizione dall'ora legale all'ora solare di un determinato fuso orario. Ad esempio, se questa transizione si verifica in un determinato giorno alle 2:00 e fa sì che l'ora cambi alle 1:00, ogni intervallo di tempo compreso tra le 1:00 e le 1:59:59.59.M. può essere interpretato come un'ora solare o un'ora legale.
Regola fissa Regola di rettifica che imposta una determinata data per la transizione alla o dall'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 mobile Regola di rettifica che imposta un determinato giorno di una determinata settimana di un determinato mese per la transizione alla o dall'ora legale. Ad esempio, una transizione dall'ora solare all'ora legale che si verifica la terza domenica del mese di marzo segue una regola di rettifica mobile.
Ora non valida Ora inesistente creata dalla transizione dall'ora solare all'ora legale. Si verifica quando l'orologio viene portato avanti, ad esempio durante la transizione dall'ora solare all'ora legale di un determinato fuso orario. 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.M. non è valido.
Ora transizione Informazioni su una modifica di ora specifica, 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 verso e dall'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. 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 a un solo 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 che si applicano 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 significa che un'applicazione compatibile con il fuso orario non può essere certa che un particolare fuso orario sia definito nel Registro di sistema. Di conseguenza, se si prevede di creare un'istanza di un fuso orario specifico (diverso dal fuso orario locale o da quello che rappresenta l'ora UTC) è consigliabile usare la gestione delle eccezioni. Deve inoltre fornire un metodo per consentire all'applicazione di continuare se non è possibile creare un'istanza di un oggetto obbligatorio TimeZoneInfo dal Registro di sistema.

Per gestire l'assenza di un fuso orario necessario, la TimeZoneInfo classe include un CreateCustomTimeZone metodo , che è possibile usare per creare fusi orari personalizzati che non vengono 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 usare 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.

Dato che ogni fuso orario è caratterizzato da un offset di base rispetto al fuso orario UTC, nonché da un offset da UTC che riflette eventuali regole di rettifica, un'ora in un fuso orario può essere convertita facilmente nell'ora corrispondente 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 nell'ora in un altro fuso orario designato.

  • ConvertTimeBySystemTimeZoneId, che usa gli identificatori di 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 degli orari tra fusi orari, vedere Conversione degli orari tra fusi orari.

Vedi anche