DateTime în C# (.NET)

.NET BCL și CLI-ul dotnet .NET Framework 1.0

Reprezintă o dată cu oră: creare, adunare de zile și luni, diferențe, formatare și citire din text cu ParseExact.

Sintaxă C#
var d = new DateTime(2026, 10, 25, 14, 30, 0);   d.AddDays(10)   d.ToString("dd.MM.yyyy")

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, MM luna. "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.Parse fără cultură interpretează 03.04.2026 diferit pe calculatoare diferite (3 aprilie sau 4 martie). Folosește ParseExact cu 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ă.