Structura DateTime
Pentru lucrul cu date și timp în .NET este destinată structura DateTime. Aceasta reprezintă data și ora de la 00:00:00 1 ianuarie 0001 până la 23:59:59 31 decembrie 9999.
Pentru crearea unui nou obiect DateTime se poate folosi și constructorul. Constructorul gol creează data inițială:
DateTime dateTime = new DateTime();
Console.WriteLine(dateTime); // 01.01.0001 0:00:00
Adică vom obține valoarea minimă posibilă, care poate fi obținută și astfel:
Console.WriteLine(DateTime.MinValue);
Pentru a seta o dată specifică, trebuie folosit unul dintre constructorii care acceptă parametri:
DateTime date1 = new DateTime(2015, 7, 20); // an - lună - zi
Console.WriteLine(date1); // 20.07.2015 0:00:00
Setarea timpului:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // an - lună - zi - oră - minut - secundă
Console.WriteLine(date1); // 20.07.2015 18:30:25
Dacă este necesar să obținem timpul și data curentă, se pot folosi mai multe proprietăți ale DateTime:
Console.WriteLine(DateTime.Now);
Console.WriteLine(DateTime.UtcNow);
Console.WriteLine(DateTime.Today);
Ieșire în consolă:
20.07.2015 11:43:33
20.07.2015 8:43:33
20.07.2015 0:00:00
Proprietatea DateTime.Now ia data și ora curentă a calculatorului, DateTime.UtcNow - data și ora relativă la timpul Greenwich (GMT) și DateTime.Today - doar data curentă.
La lucrul cu datele trebuie să se țină cont că, în mod implicit, pentru reprezentarea datelor se folosește calendarul gregorian. Dar ce se întâmplă dacă dorim să obținem ziua săptămânii pentru 5 octombrie 1582:
DateTime someDate = new DateTime(1582, 10, 5);
Console.WriteLine(someDate.DayOfWeek);
Consola va afișa valoarea Tuesday, adică marți. Cu toate acestea, după cum se știe din istorie, prima trecere de la calendarul iulian la calendarul gregorian a avut loc în octombrie 1582. Atunci, după data de 4 octombrie (joi) (încă după calendarul iulian) s-a trecut direct la 15 octombrie (vineri)(deja după calendarul gregorian). Astfel, au fost eliminate efectiv 10 zile. Adică, după 4 octombrie urma 15 octombrie.
În majoritatea cazurilor acest fapt nu va afecta calculele, dar la lucrul cu date foarte vechi acest aspect trebuie avut în vedere.
Operații cu DateTime
Operațiile principale cu structura DateTime sunt legate de adunarea sau scăderea datelor. De exemplu, trebuie să adăugăm sau să scădem câteva zile de la o anumită dată.
Pentru adăugarea datelor se folosesc mai multe metode:
- Add(TimeSpan value): adaugă la dată valoarea TimeSpan
- AddDays(double value): adaugă câteva zile la data curentă
- AddHours(double value): adaugă câteva ore la data curentă
- AddMinutes(double value): adaugă câteva minute la data curentă
- AddMonths(int value): adaugă câteva luni la data curentă
- AddYears(int value): adaugă câțiva ani la data curentă
De exemplu, adăugăm la o anumită dată 3 ore:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
Console.WriteLine(date1.AddHours(3)); // 20.07.2015 21:30:25
Pentru scăderea datelor se folosește metoda Subtract(DateTime date):
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
DateTime date2 = new DateTime(2015, 7, 20, 15, 30, 25); // 20.07.2015 15:30:25
Console.WriteLine(date1.Subtract(date2)); // 03:00:00
Aici datele diferă cu trei ore, așa că rezultatul va fi data "03:00:00".
Metoda Subtract nu permite scăderea separată a zilelor, orelor și așa mai departe. Dar nu este necesar, deoarece putem transmite metodei AddDays() și altor metode de adăugare valori negative:
// scădem trei ore
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25); // 20.07.2015 18:30:25
Console.WriteLine(date1.AddHours(-3)); // 20.07.2015 15:30:25
În afară de operațiile de adunare și scădere mai există și câteva metode de formatare a datelor:
DateTime date1 = new DateTime(2015, 7, 20, 18, 30, 25);
Console.WriteLine(date1.ToLocalTime()); // 20.07.2015 21:30:25
Console.WriteLine(date1.ToUniversalTime()); // 20.07.2015 15:30:25
Console.WriteLine(date1.ToLongDateString()); // 20 iulie 2015
Console.WriteLine(date1.ToShortDateString()); // 20.07.2015
Console.WriteLine(date1.ToLongTimeString()); // 18:30:25
Console.WriteLine(date1.ToShortTimeString()); // 18:30
Metoda ToLocalTime() transformă timpul UTC în timpul local, adăugând diferența față de timpul Greenwich. Metoda ToUniversalTime(), dimpotrivă, transformă timpul local în timpul UTC, adică scade diferența față de timpul Greenwich. Celelalte metode transformă data într-un anumit format.