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.
DateTime makenJe 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
DateTimeook op het huidige moment laten staan metDateTime.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.
Een DateTime bundelt verschillende waarden. Met een eigenschap (een naam
achter een punt, zonder haakjes) vraag je één onderdeel op:
| Eigenschap | Betekenis |
|---|---|
.Day | De dag van de maand (1 t.e.m. 31) |
.Month | De maand (1 t.e.m. 12) |
.Year | Het jaar |
.Hour | Het uur (0 t.e.m. 23) |
.Minute | De minuut (0 t.e.m. 59) |
.Second | De 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
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:00 | Resultaat |
|---|---|
AddDays(100) | 27/07/2025 om 10:00 |
AddMonths(20) | 18/12/2026 om 10:00 |
AddHours(99) | 22/04/2025 om 13:00 |
AddMonthshoudt 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).
Subtract en TimeSpanWil 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:
| Eigenschap | Betekenis |
|---|---|
.Days | Het totaal aantal hele dagen in de duur |
.Hours | De overblijvende uren (0 t.e.m. 23) |
.Minutes | De overblijvende minuten (0 t.e.m. 59) |
.Seconds | De 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
.Daystelt alle volle dagen samen (dus ook honderden of duizenden), terwijl.Hours,.Minutesen.Secondsenkel het stukje tonen dat na die volle dagen overblijft. Zo verdeel je de hele duur netjes over dagen, uren, minuten en seconden.