Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Om met datums en tijdstippen te werken heeft C# een speciaal datatype: DateTime. Net zoals Math een klasse is met functies voor getallen, is DateTime een type dat een volledig moment in de tijd bijhoudt: een jaar, een maand, een dag, een uur, een minuut en een seconde, allemaal in één variabele.

Een DateTime maken

Je maakt een DateTime met het sleutelwoord new, gevolgd door de onderdelen van het moment dat je wil voorstellen. De volgorde is jaar, maand, dag en eventueel ook uur, minuut, seconde:

// 15 december 2001 (zonder tijdstip: middernacht, dus 00:00:00)
DateTime datumVeld = new DateTime(2001, 12, 15);

// 12 mei 2005 om 14:30:00
DateTime eenMoment = new DateTime(2005, 5, 12, 14, 30, 0);

Geef je geen uur, minuut en seconde mee, dan staat de tijd op middernacht (00:00:00). Let goed op de volgorde: het jaar komt eerst, niet de dag.

Je kan een DateTime ook op het huidige moment laten staan met DateTime.Now. Dat is handig in een echt programma, maar de waarde verandert bij elke uitvoering. In de oefeningen hieronder lezen we het tijdstip daarom telkens zelf in via de invoer, zodat de uitvoer voorspelbaar blijft.

De afzonderlijke onderdelen opvragen

Een DateTime bundelt verschillende waarden. Met een eigenschap (een naam achter een punt, zonder haakjes) vraag je één onderdeel op:

EigenschapBetekenis
.DayDe dag van de maand (1 t.e.m. 31)
.MonthDe maand (1 t.e.m. 12)
.YearHet jaar
.HourHet uur (0 t.e.m. 23)
.MinuteDe minuut (0 t.e.m. 59)
.SecondDe seconde (0 t.e.m. 59)

Merk op dat er geen haakjes achter staan: het zijn eigenschappen, geen functies.

DateTime moment = new DateTime(2005, 5, 12, 14, 30, 0);

Console.WriteLine(moment.Day);     // 12
Console.WriteLine(moment.Month);   // 5
Console.WriteLine(moment.Year);    // 2005
Console.WriteLine(moment.Hour);    // 14
Console.WriteLine(moment.Minute);  // 30
Console.WriteLine(moment.Second);  // 0

Bewerkingen op een datum

Op een DateTime kan je ook rekenen. De functies AddDays, AddMonths en AddHours geven een nieuwe DateTime terug die het opgegeven aantal dagen, maanden of uren verder ligt. De oorspronkelijke DateTime blijft ongewijzigd: je moet het resultaat dus zelf opvangen.

DateTime start = new DateTime(2025, 4, 18, 10, 0, 0); // 18/04/2025 om 10:00

DateTime later = start.AddDays(100);
Console.WriteLine(later);   // 100 dagen later

Console.WriteLine(start.AddMonths(20));  // 20 maanden later
Console.WriteLine(start.AddHours(99));   // 99 uur later
Bewerking op 18/04/2025 om 10:00Resultaat
AddDays(100)27/07/2025 om 10:00
AddMonths(20)18/12/2026 om 10:00
AddHours(99)22/04/2025 om 13:00

AddMonths houdt rekening met het aantal dagen in een maand. Tel je een maand bij 31 januari op, dan bestaat 31 februari niet en wordt het resultaat de laatste dag van februari (28 februari, of 29 februari in een schrikkeljaar).

Het verschil tussen twee datums: Subtract en TimeSpan

Wil je weten hoeveel tijd er tussen twee momenten zit, dan gebruik je de functie Subtract. Die trekt het ene moment van het andere af en geeft het resultaat terug als een TimeSpan: een aparte tijdduur (niet een moment, maar een lengte van tijd).

DateTime geboorte = new DateTime(1999, 5, 12, 14, 30, 0);
DateTime nu = new DateTime(2025, 6, 16, 8, 15, 30);

TimeSpan verschil = nu.Subtract(geboorte);

Uit een TimeSpan haal je opnieuw de afzonderlijke onderdelen, maar nu met eigenschappen die bij een duur horen:

EigenschapBetekenis
.DaysHet totaal aantal hele dagen in de duur
.HoursDe overblijvende uren (0 t.e.m. 23)
.MinutesDe overblijvende minuten (0 t.e.m. 59)
.SecondsDe overblijvende seconden (0 t.e.m. 59)
TimeSpan verschil = nu.Subtract(geboorte);

Console.WriteLine(verschil.Days);     // het aantal volle dagen
Console.WriteLine(verschil.Hours);    // de resterende uren
Console.WriteLine(verschil.Minutes);  // de resterende minuten
Console.WriteLine(verschil.Seconds);  // de resterende seconden

.Days telt alle volle dagen samen (dus ook honderden of duizenden), terwijl .Hours, .Minutes en .Seconds enkel het stukje tonen dat na die volle dagen overblijft. Zo verdeel je de hele duur netjes over dagen, uren, minuten en seconden.