DateOnly și TimeOnly
Pentru a simplifica lucrul cu datele și timpul în .NET 6 au fost adăugate două structuri suplimentare - DateOnly și TimeOnly.
DateOnly
Structura DateOnly reprezintă data. Pentru crearea structurii se poate folosi o serie de constructori.
DateOnly()
DateOnly(int year, int month, int day)
DateOnly(int year, int month, int day, System.Globalization.Calendar calendar)
La utilizarea constructorului fără parametri structura este inițializată cu data 01.01.0001:
DateOnly someDate = new DateOnly();
Console.WriteLine(someDate); // 01.01.0001
A doua versiune a constructorului acceptă anul, luna și ziua cu care se inițializează structura:
DateOnly someDate = new DateOnly(2022,1,6); // 6 ianuarie 2022
Console.WriteLine(someDate); // 06.01.2022
A treia versiune a constructorului, pe lângă an, lună și zi, acceptă și un obiect calendar - un obiect System.Globalization.Calendar, față de care se va calcula data.
Clasa Calendar este abstractă, dar .NET oferă o serie de tipuri de calendare încorporate. De exemplu, să calculăm data relativ la calendarul iulian:
using System.Globalization;
DateOnly julianDate = new DateOnly(2022,1,6, new JulianCalendar());
Console.WriteLine(julianDate); // 19.01.2022
În acest caz pentru .NET data transmisă în constructor - 06.01.2022 este considerată ca fiind data calendarului iulian. La afișarea în consolă vedem aceeași zi, dar relativ la calendarul gregorian.
Proprietățile DateOnly
Cu ajutorul proprietăților structurii putem obține componentele individuale ale datei:
- Day: returnează ziua datei
- DayNumber: returnează numărul de zile trecute de la 1 ianuarie 0001 relativ la calendarul gregorian
- DayOfWeek: returnează ziua săptămânii
- DayOfYear: returnează ziua anului
- MaxValue: returnează data maximă posibilă (proprietate statică)
- MinValue: returnează cea mai timpurie dată posibilă (proprietate statică)
- Month: returnează luna
- Year: returnează anul
Aplicarea proprietăților:
DateOnly now = new DateOnly(2022,1,6);
Console.WriteLine(now.Day); // 6
Console.WriteLine(now.DayNumber); // 738160
Console.WriteLine(now.DayOfWeek); // Thursday
Console.WriteLine(now.DayOfYear); // 6
Console.WriteLine(now.Month); // 1
Console.WriteLine(now.Year); // 2022
Metodele DateOnly
Cu ajutorul metodelor DateOnly se pot efectua anumite operații cu datele. Unele dintre ele:
- AddDays(int days): adaugă un număr de zile la dată
- AddMonths(int months): adaugă un număr de luni la dată
- AddYears(int years): adaugă un număr de ani la dată
- ToDateTime(TimeOnly): returnează un obiect DateTime care folosește ca dată obiectul curent DateOnly și ca timp valoarea parametrului sub forma TimeOnly
- ToLongDateString(): afișează obiectul curent DateOnly sub forma unei date detaliate
- ToShortDateString(): afișează obiectul curent DateOnly sub forma unei date scurte
De asemenea, clasa are o serie de metode statice. Unele dintre ele:
- FromDateTime(DateTime dateTime): pe baza valorii DateTime transmisă prin parametru, creează și returnează un obiect DateOnly
- FromDayNumber(int days): pe baza numărului de zile creează și returnează un obiect DateOnly
- Parse(string date): convertește reprezentarea string a unei date într-un obiect DateOnly
- ParseExact(string date, string format): convertește reprezentarea string a unei date într-un obiect DateOnly aplicând un format specific
- TryParse(String, DateOnly): convertește reprezentarea string a unei date într-un obiect DateOnly. La conversia reușită returnează true, iar parametrul de tip DateOnly conține data creată
- TryParseExact(String, String, DateOnly): convertește reprezentarea string a unei date într-un obiect DateOnly aplicând un format specific. La conversia reușită returnează true, iar parametrul de tip DateOnly conține data creată
Exemplu de operații:
DateOnly now = DateOnly.Parse("06.01.2022"); // pe un sistem de operare localizat în limba rusă
Console.WriteLine(now); // 06.01.2022
now = now.AddDays(1); // 07.01.2022
now = now.AddMonths(4); // 07.05.2022
now = now.AddYears(-1); // 07.05.2021
Console.WriteLine(now.ToShortDateString()); // 07.05.2021
Console.WriteLine(now.ToLongDateString()); // 7 mai 2021
TimeOnly
Structura TimeOnly reprezintă timpul în intervalul de la 00:00:00 la 23:59:59.9999999. Pentru crearea structurii se poate folosi o serie de constructori.
TimeOnly()
TimeOnly(long ticks)
TimeOnly(int hour, int minute)
TimeOnly(int hour, int minute, int second)
TimeOnly(int hour, int minute, int second, int millisecond)
La utilizarea constructorului fără parametri structura este inițializată cu timpul 0.00:
TimeOnly time = new TimeOnly();
Console.WriteLine(time); // 0:00
În plus, cu ajutorul altor versiuni ale constructorului se poate stabili numărul de ore, minute, secunde și milisecunde:
TimeOnly time1 = new TimeOnly(4, 30);
Console.WriteLine(time1); // 4:30
TimeOnly time2 = new TimeOnly(14, 23, 30);
Console.WriteLine(time2); // 14:23
Proprietățile TimeOnly
Cu ajutorul proprietăților structurii putem obține componentele individuale ale timpului:
- Hour: returnează numărul de ore
- Minute: returnează numărul de minute
- Second: returnează numărul de secunde
- Millisecond: returnează numărul de milisecunde
- Ticks: returnează numărul de tichete
- MaxValue: returnează timpul maxim posibil (proprietate statică)
- MinValue: returnează timpul minim posibil (proprietate statică)
Aplicarea proprietăților:
TimeOnly time = new TimeOnly(14, 23, 30);
Console.WriteLine(time.Hour); // 14
Console.WriteLine(time.Minute); // 23
Console.WriteLine(time.Second); // 30
Metodele TimeOnly
Cu ajutorul metodelor TimeOnly se pot efectua anumite operații cu timpul. Unele dintre ele:
- AddHours(double hours): adaugă un număr de ore la timp
- AddMinutes(double minutes): adaugă un număr de minute la timp
- Add(TimeSpan value): adaugă timp din obiectul TimeSpan
- ToLongTimeString(): afișează obiectul curent TimeOnly sub forma unui timp detaliat
- ToShortTimeString(): afișează obiectul curent TimeOnly sub forma unui timp scurt
De asemenea, clasa are o serie de metode statice. Unele dintre ele:
- FromDateTime(DateTime dateTime): pe baza valorii DateTime transmisă prin parametru, creează și returnează un obiect TimeOnly
- FromTimeSpan(TimeSpan value): pe baza obiectului TimeSpan creează și returnează un obiect TimeOnly
- Parse(string time): convertește reprezentarea string a timpului într-un obiect TimeOnly
- ParseExact(string time, string format): convertește reprezentarea string a timpului într-un obiect TimeOnly aplicând un format specific
- TryParse(string time, TimeOnly result): convertește reprezentarea string a timpului într-un obiect TimeOnly. La conversia reușită returnează true, iar parametrul de tip TimeOnly conține timpul creat
- TryParseExact(string time, string format, TimeOnly result): convertește reprezentarea string a timpului într-un obiect TimeOnly aplicând un format specific. La conversia reușită returnează true, iar parametrul de tip TimeOnly conține timpul creat
Exemplu de operații:
TimeOnly time = TimeOnly.Parse("06:33:22");
Console.WriteLine(time); // 6:33
time = time.AddHours(1); // 7:33
time = time.AddMinutes(-23); // 7:10
Console.WriteLine(time.ToShortTimeString()); // 7:10
Console.WriteLine(time.ToLongTimeString()); // 7:10:22