Per la gestione di Date e Time all’interno di applicazioni C# si utilizzano DateTime e TimeSpan.
DateTime è una combinazine di date e ore per un determinato tempo
TimeSpan rappresenta un durata nel tempo
Solitamente vengono utilizzati insieme, ad esempio è possibile aggiungere un TimeSpan ad un DateTime per generare un nuovo DateTime. Oppure, facendo la differenza tra due DateTime, il risultato è un TimeSpan.
Un alternativa può essere quella di rappresentare una data come una string, ma questo porta a problemi legati alla culture del thread in cui viene utilizzata. Per esempio in US le date vengono rappresentate nel formato mese/giorno/anno mentre in UK nel formato giorno/mese/anno.
Si può, ad esempio create una semplice console application dove visualizzare una specifica data, tramite ad esempio DateTime.Now. E’ possibile cambiare la culture dell’applicazione utilizzando :
Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("en-GB");In questo modo forziamo la culture ad en, in modo da visualizzare le date nel formato giorno/mese/anno.
DateTime contiene al suo interno una serie di date preimpostate che corrispondono al MinValue, MaxValue, UnixEpoc, Now e Today.
Microsecondi e NanoSecondi
Nelle versioni precedenti di .NET, l’unità di misura per il tempo era il tick. Un tick corrisponde a 100 nanosecondi, cosi molto spesso gli sviluppatori dovevano fare calcoli per avere le giuste unità di misura. In .NET 7 sono stati introdotti all’interno del costruttore anche i parametri mille-micro secondi e micro-nanosecondi per DateTime, DateTimeOffsset, TimeSpan e TimeOnly.
Con .NET 7 è quindi possibile creare un oggetto DateTime usando:
Datetime example = new (year: 2022, month: 11, day: 8, hour:12, minute: 6, second:0, millisecond:6, microsecond: 999)
ed in particolare il range di valori che possono essere utilizzati sono:
| Parametro | Value |
| year | da 1 a 9999 |
| month | da 1 a 12 |
| day | da 1 al numero di giorni del mese |
| hour | da 0 a 23 |
| minute | da 0 a 59 |
| second | da 0 a 59 |
| millisecond | da 0 a 999 |
| microsecond | da 0 a 999 |
.Net 6 ha introtoddo due nuovi tipi che consentono di gestire solo la data oppure solo il tempo: DateOnly e TimeOnly. E’ preferibile, per esempio, utilizzare DateOnly per la memorizzazione di una data rispetto all’utilizzo di DateTime (con la parte relativa all’ora impostata a zero) perchè è type-safe e consente di evitare comportamenti errati.
DateOnly è utilizzabe inoltre per la mappatura di colonne all’interno di database SQL Server.
TimeOnly può essere utile per impostare alert o operazioni ripetitive (es. Task), oltre ovviamente a mappare campi Time all’interno di SQL Server.