Ce face DateTime
DateTime este un tip valoare imutabil: AddDays, AddMonths, AddHours nu schimbă obiectul, ci întorc unul nou. Diferența a două date este un TimeSpan. DateTime.Now dă ora locală, DateTime.UtcNow ora UTC, iar DateTime.Today data de azi la miezul nopții.
Formatarea se face cu ToString(format, cultura): dd zi, MM lună, yyyy an, HH oră 0-23, mm minute, dddd numele zilei, MMMM numele lunii. Numele depind de cultură, așa că dă explicit new CultureInfo("ro-RO") când vrei română.
Pentru date fără oră (zile de naștere, scadențe) există DateOnly, iar pentru momente exacte cu fus orar DateTimeOffset. Salvează în baza de date ora UTC și convertește la ora locală doar la afișare.
Parametri
| Parametru | Descriere |
|---|---|
year, month, day |
Constructorul de bază; valorile invalide (31 aprilie) aruncă ArgumentOutOfRangeException. |
hour, minute, second |
Opțional, ora. |
format |
La ToString/ParseExact: șablonul, de exemplu "dd.MM.yyyy HH:mm". |
Exemple
Exemplul 1: Creare, adunare și formatare
using System.Globalization;
var ro = new CultureInfo("ro-RO");
var d = new DateTime(2026, 10, 25, 14, 30, 0);
Console.WriteLine(d.ToString("dd.MM.yyyy HH:mm"));
Console.WriteLine(d.ToString("dddd, d MMMM yyyy", ro));
Console.WriteLine(d.AddDays(10).ToString("yyyy-MM-dd"));
Console.WriteLine(d.AddHours(36.75).ToString("dd.MM HH:mm"));
Console.WriteLine(d.DayOfWeek);
Console.WriteLine(DateTime.DaysInMonth(2028, 2));
Rezultat
25.10.2026 14:30
duminică, 25 octombrie 2026
2026-11-04
27.10 03:15
Sunday
29
Exemplul 2: Citire din text și diferența dintre două date
TryParseExact acceptă doar formatul dat; scăderea a două DateTime dă un TimeSpan.
using System.Globalization;
string[] intrari = ["25.12.2026", "2026-12-25", "31.04.2026"];
var azi = new DateTime(2026, 10, 25);
foreach (string text in intrari)
{
if (DateTime.TryParseExact(text, "dd.MM.yyyy", CultureInfo.InvariantCulture,
DateTimeStyles.None, out DateTime data))
Console.WriteLine($"{text}: zile rămase {(data - azi).Days}");
else
Console.WriteLine($"{text}: dată invalidă");
}
Rezultat
25.12.2026: zile rămase 61
2026-12-25: dată invalidă
31.04.2026: dată invalidă
Greșeli frecvente
mmînseamnă minute,MMluna."dd.mm.yyyy"afișează minutele în locul lunii.d.AddDays(1);fără atribuire nu face nimic: rezultatul trebuie păstrat (d = d.AddDays(1);).DateTime.Parsefără cultură interpretează03.04.2026diferit pe calculatoare diferite (3 aprilie sau 4 martie). FoloseșteParseExactcu format și cultură.
Comenzi înrudite
DateOnly și TimeOnly: DateOnly ține doar o zi din calendar, TimeOnly doar o oră din zi: potrivite pentru zile de naștere, scadențe și program de lucru.TimeSpan: Reprezintă o durată (ore, minute, secunde): creare, adunare, proprietăți Total* și formatare ca text.Formatarea numerelor și string.Format: Specificatori de format (N2, F1, D5, X) și aliniere în string.Format, ToString și șiruri interpolate, cu cultura ro-RO.int.Parse și int.TryParse: Transformă text în număr: Parse aruncă excepție la text invalid, TryParse returnează false și nu aruncă.