in C#, Programmazione

C# Date e Time

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:

ParametroValue
yearda 1 a 9999
monthda 1 a 12
dayda 1 al numero di giorni del mese
hourda 0 a 23
minuteda 0 a 59
secondda 0 a 59
millisecondda 0 a 999
microsecondda 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.

  • Articoli Correlati per Tag :