Introduzione

Nello sviluppo di applicazioni, sia web che desktop, sicuramente ci saremo imbattuti nell’utilizzo di DateTime e dei suoi costrutti per ricavare il giorno, il mese, l’anno o le ore ed i minuti.

Con la prossima release di .NET 6, attualmente in preview 4, saranno disponibili i nuovi tipi per DateOnly e TypeOnly.

In questo articolo:

Tipo DateOnly

Conclusioni

Tipo DateOnly

Il tipo DateOnly può essere utilizzato per rappresentare la sola data come anno, mese e giorno. E’ l’ideale per scenari quali date di nascita, anniversari, date di assunzione e altre date di lavoro che in genere non sono associate a un momento particolare.

Vediamo qui di seguito qualche esempio:

// Costrutto e proprietà
DateOnly d1 = new DateOnly(2021, 5, 31);
Console.WriteLine(d1.Year);      // 2021
Console.WriteLine(d1.Month);     // 5
Console.WriteLine(d1.Day);       // 31
Console.WriteLine(d1.DayOfWeek); // Lunedì

// Operazioni
DateOnly d2 = d1.AddMonths(1);  // Si possono aggiungere giorni, mesi o anni. Utilizzando valori negativi si eseguiranno le relative sottrazioni
Console.WriteLine(d2);     // "30/06/2021" notare l'assenza dell'ora

// Utilizzando la proprietà DayNumber si può ricavare la differenza in giorni tra due date
int giorni = d2.DayNumber - d1.DayNumber;
Console.WriteLine($"Sono trascorsi {days} giorni tra il {d1} ed il {d2}");

Conclusioni

Un DateOnly rappresenta l’intera data dall’inizio della giornata (00:00:00) fino alla fine della giornata (23:59:59). Fino ad ora, abbiamo utilizzato DateTime per questo scopo, probabilmente con l’ora impostata sulla mezzanotte (00:00:00.0000000). Sebbene funzioni ancora, ci sono diversi vantaggi nell’usare un DateOnly.

  • Un DateOnly può essere molto utile quando si utilizzano le API in quanto ci facilita le varie operazioni che non necessitano di tutto il dato previsto nel tipo DateTime. Ad esempio, il metodo TimeZoneInfo.ConvertTime può essere usato per convertire un DateTime da un fuso orario a un altro. Passare un DateTime non ha senso, poiché è possibile convertire solo un singolo punto nel tempo in quella data.
  • Quando si serializza un DateOnly, è necessario includere solo l’anno, il mese e il giorno. Ciò rende il dato più chiaro tutti quegli zeri che dovevamo aggiungere alla fine.

Sicuramente, in un prossimo futuro, ci saranno delle evoluzioni nell’ambito dei database per sfruttare appieno questa nuova funzionalità.