Date, ore e fusi orari
.NET fornisce tipi che rappresentano date, ore e fusi orari. Questo articolo descrive questi tipi.
Oltre alla struttura di base DateTime, .NET fornisce le classi seguenti che supportano l'uso dei fusi orari:
-
Usare questa classe per lavorare con qualsiasi fuso orario predefinito in un sistema, per creare nuovi fusi orari e per convertire facilmente date e ore da un fuso orario a un altro. Per il nuovo sviluppo, usare la classe TimeZoneInfo anziché la classe TimeZone.
-
Utilizzare questa struttura per lavorare con date e orari il cui offset (o differenza) rispetto a UTC è conosciuto. La struttura DateTimeOffset combina un valore di data e ora con l'offset dell'ora rispetto all'ora universale coordinata (UTC). A causa della relazione con l'ora UTC, un singolo valore di data e ora identifica in modo univoco un singolo punto nel tempo. In questo modo un valore DateTimeOffset è più portabile da un computer a un altro rispetto a un valore DateTime.
Le classi seguenti per supportare l'uso del tempo:
-
Utilizzare questa struttura per rappresentare un intervallo di tempo, ad esempio un intervallo di tempo trascorso o la differenza tra due date.
-
Utilizzare questa struttura per rappresentare un'ora senza una data. L'ora rappresenta le ore, i minuti e i secondi di un giorno non specifico.
TimeOnly
ha un intervallo di00:00:00.0000000
da23:59:59.9999999
. Questo tipo può essere usato per sostituire i tipiDateTime
eTimeSpan
nel codice quando questi tipi sono stati usati per rappresentare un'ora o un momento nel tempo. Per altre informazioni, vedere Come usare le strutture DateOnly e TimeOnly.Importante
TimeOnly non è disponibile per .NET Framework.
-
Si tratta di una classe di base che fornisce un'astrazione del tempo. Un modo comune per controllare l'ora corrente consiste nell'usare
DateTime.UtcNow
oDateTimeOffset.UtcNow
. Tuttavia, questi tipi non forniscono alcun controllo su ciò che viene considerato "ora". Perché vuoi controllarlo? Testabilità. Si consideri, ad esempio, di scrivere un'applicazione di rilevamento eventi che fornisce promemoria 1 giorno prima dell'evento. La logica dell'app consiste nel controllare l'ora dell'evento ogni ora e avvisare l'utente dopo 24 ore prima dell'evento. Quando si scrivono i test per l'app, è necessario fornire il proprio tipo che avvolgeDateTimeOffset.UtcNow
per testare questa logica, ma ora .NET fornisce questa classe astratta.Per altre informazioni, vedere What is TimeProvider.
Il tipo
TimeProvider
è incluso in .NET.Per .NET Framework e .NET Standard,
TimeProvider
viene fornito dal pacchetto Microsoft.Bcl.TimeProvider pacchetto NuGet.
Le classi seguenti per supportare l'utilizzo delle date:
-
Utilizzare questa struttura quando si utilizza un valore che rappresenta solo una data. La data rappresenta l'intero giorno, dall'inizio del giorno alla fine.
DateOnly
ha un intervallo da0001-01-01
fino a9999-12-31
. E questo tipo rappresenta la combinazione di mese, giorno e anno senza un'ora specifica. Se in precedenza hai usato un tipo diDateTime
nel codice per rappresentare una data che ignora l'ora, usa questo tipo al suo posto. Per altre informazioni, vedere Come usare le strutture DateOnly e TimeOnly.Importante
DateOnly non è disponibile per .NET Framework.
La sezione successiva fornisce le informazioni necessarie per lavorare con i fusi orari e per creare applicazioni con riconoscimento del fuso orario in grado di convertire date e ore da un fuso orario a un altro.
In questa sezione
panoramica del fuso orario
Illustra la terminologia, i concetti e i problemi relativi alla creazione di applicazioni con riconoscimento del fuso orario.
Scelta tra DateTime, DateTimeOffset, TimeSpan e TimeZoneInfo
Viene illustrato quando usare i tipi DateTime, DateTimeOffsete TimeZoneInfo quando si usano dati di data e ora.
Ricerca dei fusi orari definiti in un sistema locale
Descrive come enumerare i fusi orari trovati in un sistema locale.
Procedura: Enumerare i fusi orari presenti in un computer
Vengono forniti esempi che enumerare i fusi orari definiti nel Registro di sistema di un computer e che consentono agli utenti di selezionare un fuso orario predefinito da un elenco.
Procedura: Accedere agli oggetti UTC e fuso orario locale predefiniti
Viene descritto come accedere all'ora universale coordinata e al fuso orario locale.
Procedura: Creare un'istanza di un oggetto TimeZoneInfo
Viene descritto come creare un'istanza di un oggetto TimeZoneInfo dal Registro di sistema locale.
creazione di un'istanza di un oggetto DateTimeOffset
Vengono illustrati i modi in cui è possibile creare un'istanza di un oggetto DateTimeOffset e i modi in cui un valore DateTime può essere convertito in un valore DateTimeOffset.
Procedura: Creare fusi orari senza regole di rettifica
Viene descritto come creare un fuso orario personalizzato che non supporta la transizione da e verso l'ora legale.
Procedura: Creare fusi orari con regole di regolazione
Viene descritto come creare un fuso orario personalizzato che supporti una o più transizioni da e verso l'ora legale.
Salvataggio e ripristino dei fusi orari
Descrive il supporto TimeZoneInfo per la serializzazione e la deserializzazione dei dati del fuso orario e illustra alcuni scenari in cui queste funzionalità possono essere utilizzate.
Procedura: Salvare fusi orari in una risorsa incorporata
Viene descritto come creare un fuso orario personalizzato e salvare le informazioni in un file di risorse.
Procedura: Ripristinare le impostazioni dei fusi orari da una risorsa integrata
Descrive come istanziare fusi orari personalizzati salvati in un file di risorse incorporato.
Esecuzione di operazioni aritmetiche con date e ore
Vengono illustrati i problemi relativi all'aggiunta, alla sottrazione e al confronto dei valori di DateTime e DateTimeOffset.
Procedura: Utilizzare i fusi orari nei calcoli di data e ora
Viene illustrato come eseguire l'aritmetica di data e ora che riflette le regole di regolazione di un fuso orario.
conversione tra DateTime e DateTimeOffset
Viene descritto come convertire i valori tra DateTime e DateTimeOffset.
Conversione di orari tra fusi orari
Viene descritto come convertire gli orari da un fuso orario a un altro.
Come risolvere gli orari ambigui
Descrive come risolvere un'ora ambigua mappandola all'ora solare del fuso orario.
Procedura: Consentire agli utenti di risolvere orari ambigui
Descrive come consentire a un utente di determinare il mapping tra un'ora locale ambigua e l'ora universale coordinata.