DateTime - Naslagwerk en voorbeelden

Inleiding

Dit naslagwerk bevat alle belangrijke DateTime functionaliteiten die je nodig hebt als C# programmeur. Het is georganiseerd per onderwerp met praktische voorbeelden die je direct kunt gebruiken. Bewaar dit document, want je zult het vaak nodig hebben!


1. DateTime aanmaken

De huidige datum en tijd ophalen

// Lokale tijd (volgens je computer/tijdzone)
DateTime nu = DateTime.Now;
Console.WriteLine(nu);  // Bijvoorbeeld: 12/11/2025 14:32:15

// Universele tijd (UTC)
DateTime utcNu = DateTime.UtcNow;
Console.WriteLine(utcNu);  // Bijvoorbeeld: 12/11/2025 13:32:15

// Alleen de datum van vandaag (tijd = 00:00:00)
DateTime vandaag = DateTime.Today;
Console.WriteLine(vandaag);  // Bijvoorbeeld: 12/11/2025 0:00:00

Een specifieke datum aanmaken

// Formaat: new DateTime(jaar, maand, dag)
DateTime nieuwjaar = new DateTime(2025, 1, 1);
Console.WriteLine(nieuwjaar);  // 1/01/2025 0:00:00

// Met tijd erbij: new DateTime(jaar, maand, dag, uur, minuut, seconde)
DateTime afspraak = new DateTime(2025, 12, 25, 15, 30, 0);
Console.WriteLine(afspraak);  // 25/12/2025 15:30:00

// Met milliseconden
DateTime precies = new DateTime(2025, 6, 15, 10, 30, 45, 500);
Console.WriteLine(precies);  // 15/06/2025 10:30:45.500

DateTime parsen van een string

// Automatisch parsen (let op: formaat hangt af van systeeminstellingen!)
DateTime datum1 = DateTime.Parse("25/12/2025");
DateTime datum2 = DateTime.Parse("12-11-2025 14:30");

// Veilig parsen (geeft false als het niet lukt)
bool gelukt = DateTime.TryParse("31/02/2025", out DateTime resultaat);
if (gelukt)
{
    Console.WriteLine("Datum is geldig: " + resultaat);
}
else
{
    Console.WriteLine("Ongeldige datum!");
}

2. DateTime eigenschappen (Properties)

Elke DateTime heeft handige properties om onderdelen op te vragen:

DateTime moment = new DateTime(2025, 11, 12, 14, 32, 15);

// Datum onderdelen
Console.WriteLine(moment.Year);         // 2025
Console.WriteLine(moment.Month);        // 11
Console.WriteLine(moment.Day);          // 12
Console.WriteLine(moment.DayOfWeek);    // Tuesday (enum)
Console.WriteLine(moment.DayOfYear);    // 316 (de 316e dag van het jaar)

// Tijd onderdelen
Console.WriteLine(moment.Hour);         // 14
Console.WriteLine(moment.Minute);       // 32
Console.WriteLine(moment.Second);       // 15
Console.WriteLine(moment.Millisecond);  // 0

// Alleen datum of alleen tijd
Console.WriteLine(moment.Date);         // 12/11/2025 0:00:00 (tijd = 00:00:00)
Console.WriteLine(moment.TimeOfDay);    // 14:32:15 (TimeSpan)

// Technische informatie
Console.WriteLine(moment.Ticks);        // 638360639350000000 (aantal ticks)
Console.WriteLine(moment.Kind);         // Unspecified (of Local/Utc)

Dagen van de week controleren

DateTime datum = DateTime.Now;

// DayOfWeek is een enum met waarden:
// Sunday = 0, Monday = 1, Tuesday = 2, Wednesday = 3,
// Thursday = 4, Friday = 5, Saturday = 6

if (datum.DayOfWeek == DayOfWeek.Saturday || datum.DayOfWeek == DayOfWeek.Sunday)
{
    Console.WriteLine("Het is weekend! πŸŽ‰");
}
else
{
    Console.WriteLine("Doordeweekse dag, tijd om te werken!");
}

// In het Nederlands tonen
string[] dagenNL = { "zondag", "maandag", "dinsdag", "woensdag", 
                     "donderdag", "vrijdag", "zaterdag" };
string dagNL = dagenNL[(int)datum.DayOfWeek];
Console.WriteLine($"Vandaag is het {dagNL}");

3. DateTime berekeningen

Tijd toevoegen of aftrekken

DateTime start = new DateTime(2025, 1, 1, 10, 0, 0);

// Tijd toevoegen met Add... methodes
DateTime plus5Dagen = start.AddDays(5);           // 6/01/2025 10:00:00
DateTime plus3Maanden = start.AddMonths(3);       // 1/04/2025 10:00:00
DateTime plus2Jaar = start.AddYears(2);           // 1/01/2027 10:00:00
DateTime plus2Uur = start.AddHours(2);            // 1/01/2025 12:00:00
DateTime plus30Minuten = start.AddMinutes(30);    // 1/01/2025 10:30:00
DateTime plus45Seconden = start.AddSeconds(45);   // 1/01/2025 10:00:45

// Tijd aftrekken (gebruik negatieve getallen)
DateTime min1Week = start.AddDays(-7);            // 25/12/2024 10:00:00
DateTime min1Uur = start.AddHours(-1);            // 1/01/2025 9:00:00

// Combineren
DateTime complex = start.AddMonths(2).AddDays(15).AddHours(3);
Console.WriteLine(complex);  // 16/03/2025 13:00:00

Verschil tussen twee datums berekenen

DateTime start = new DateTime(2025, 1, 1, 10, 0, 0);
DateTime einde = new DateTime(2025, 1, 5, 14, 30, 0);

// Het verschil is een TimeSpan
TimeSpan verschil = einde - start;

Console.WriteLine(verschil.Days);         // 4 (aantal volledige dagen)
Console.WriteLine(verschil.Hours);        // 4 (resterende uren na dagen)
Console.WriteLine(verschil.Minutes);      // 30 (resterende minuten)

// Totaal in verschillende eenheden
Console.WriteLine(verschil.TotalDays);     // 4,1875 (totaal in dagen, als kommagetal)
Console.WriteLine(verschil.TotalHours);    // 100,5 (totaal in uren)
Console.WriteLine(verschil.TotalMinutes);  // 6030 (totaal in minuten)
Console.WriteLine(verschil.TotalSeconds);  // 361800 (totaal in seconden)

// Mooi formatteren
Console.WriteLine($"Verschil: {verschil.Days} dagen, {verschil.Hours} uren en {verschil.Minutes} minuten");

Leeftijd berekenen

DateTime geboortedatum = new DateTime(2008, 3, 15);
DateTime vandaag = DateTime.Today;

int leeftijd = vandaag.Year - geboortedatum.Year;

// Controleren of verjaardag al geweest is dit jaar
if (vandaag.Month < geboortedatum.Month || 
    (vandaag.Month == geboortedatum.Month && vandaag.Day < geboortedatum.Day))
{
    leeftijd--;  // Nog niet jarig geweest dit jaar
}

Console.WriteLine($"Leeftijd: {leeftijd} jaar");

4. DateTime vergelijken

Basis vergelijkingen

DateTime datum1 = new DateTime(2025, 6, 15);
DateTime datum2 = new DateTime(2025, 12, 25);
DateTime datum3 = new DateTime(2025, 6, 15);

// Operatoren gebruiken
bool isKleiner = datum1 < datum2;        // true
bool isGroter = datum1 > datum2;         // false
bool isGelijk = datum1 == datum3;        // true
bool isNietGelijk = datum1 != datum2;    // true

// CompareTo gebruiken (retourneert -1, 0, of 1)
int resultaat = datum1.CompareTo(datum2);
// -1 als datum1 < datum2
//  0 als datum1 == datum2
//  1 als datum1 > datum2

// Praktisch voorbeeld
if (DateTime.Now > new DateTime(2025, 12, 25))
{
    Console.WriteLine("Kerstmis is al geweest!");
}
else
{
    Console.WriteLine("Kerstmis moet nog komen!");
}

Nuttige vergelijkingsmethodes

DateTime nu = DateTime.Now;
DateTime afspraak = new DateTime(2025, 12, 25, 14, 0, 0);

// Alleen datum vergelijken (tijd negeren)
bool zelfdedag = nu.Date == afspraak.Date;

// Is een datum in het verleden?
bool inVerleden = afspraak < DateTime.Now;

// Is een datum in de toekomst?
bool inToekomst = afspraak > DateTime.Now;

// Ligt een datum tussen twee andere datums?
DateTime start = new DateTime(2025, 1, 1);
DateTime einde = new DateTime(2025, 12, 31);
bool tussenIn = afspraak >= start && afspraak <= einde;

5. DateTime formatteren (weergeven)

ToString met standaard formaten

DateTime nu = new DateTime(2025, 11, 12, 14, 32, 15);

// Standaard weergave (hangt af van systeeminstellingen)
Console.WriteLine(nu.ToString());  // 12/11/2025 14:32:15

// Alleen datum
Console.WriteLine(nu.ToShortDateString());  // 12/11/2025
Console.WriteLine(nu.ToLongDateString());   // dinsdag 12 november 2025

// Alleen tijd
Console.WriteLine(nu.ToShortTimeString());  // 14:32
Console.WriteLine(nu.ToLongTimeString());   // 14:32:15

ToString met custom formaten

De krachtigste manier om datums te formatteren:

DateTime moment = new DateTime(2025, 11, 12, 14, 5, 3);

// Datum formaten
Console.WriteLine(moment.ToString("dd/MM/yyyy"));     // 12/11/2025
Console.WriteLine(moment.ToString("MM-dd-yyyy"));     // 11-12-2025
Console.WriteLine(moment.ToString("yyyy.MM.dd"));     // 2025.11.12
Console.WriteLine(moment.ToString("dd MMMM yyyy"));   // 12 november 2025
Console.WriteLine(moment.ToString("ddd dd MMM yy")); // di 12 nov 25

// Tijd formaten
Console.WriteLine(moment.ToString("HH:mm"));          // 14:05
Console.WriteLine(moment.ToString("HH:mm:ss"));       // 14:05:03
Console.WriteLine(moment.ToString("hh:mm tt"));       // 02:05 PM

// Combinaties
Console.WriteLine(moment.ToString("dd/MM/yyyy HH:mm"));           // 12/11/2025 14:05
Console.WriteLine(moment.ToString("dddd d MMMM yyyy 'om' HH:mm")); // dinsdag 12 november 2025 om 14:05
Console.WriteLine(moment.ToString("'Vandaag is' dddd"));          // Vandaag is dinsdag

// Speciale codes
Console.WriteLine(moment.ToString("yyyy"));   // 2025 (jaar, 4 cijfers)
Console.WriteLine(moment.ToString("yy"));     // 25 (jaar, 2 cijfers)
Console.WriteLine(moment.ToString("MMMM"));   // november (maand, volledig)
Console.WriteLine(moment.ToString("MMM"));    // nov (maand, verkort)
Console.WriteLine(moment.ToString("MM"));     // 11 (maand, nummer met leading zero)
Console.WriteLine(moment.ToString("M"));      // 11 (maand, nummer)
Console.WriteLine(moment.ToString("dddd"));   // dinsdag (dag, volledig)
Console.WriteLine(moment.ToString("ddd"));    // di (dag, verkort)
Console.WriteLine(moment.ToString("dd"));     // 12 (dag, met leading zero)
Console.WriteLine(moment.ToString("d"));      // 12 (dag)
Console.WriteLine(moment.ToString("HH"));     // 14 (uur, 24-uurs formaat)
Console.WriteLine(moment.ToString("hh"));     // 02 (uur, 12-uurs formaat)
Console.WriteLine(moment.ToString("mm"));     // 05 (minuut)
Console.WriteLine(moment.ToString("ss"));     // 03 (seconde)
Console.WriteLine(moment.ToString("tt"));     // PM (AM/PM)

6. Werken met TimeSpan

TimeSpan representeert een tijdsduur (niet een specifiek moment).

TimeSpan aanmaken

// Directe constructie (dagen, uren, minuten, seconden)
TimeSpan duur1 = new TimeSpan(2, 5, 30, 0);  // 2 dagen, 5 uren, 30 minuten
TimeSpan duur2 = new TimeSpan(0, 2, 30, 45); // 2 uren, 30 minuten, 45 seconden

// Via FromXXX methodes (vaak makkelijker)
TimeSpan duur3 = TimeSpan.FromDays(3);         // 3 dagen
TimeSpan duur4 = TimeSpan.FromHours(2.5);      // 2,5 uur = 2u 30min
TimeSpan duur5 = TimeSpan.FromMinutes(90);     // 90 minuten = 1u 30min
TimeSpan duur6 = TimeSpan.FromSeconds(3600);   // 3600 seconden = 1 uur

// Via verschil tussen twee DateTime objecten
DateTime start = new DateTime(2025, 1, 1, 10, 0, 0);
DateTime einde = new DateTime(2025, 1, 1, 14, 30, 0);
TimeSpan verschil = einde - start;  // 4 uren en 30 minuten

TimeSpan properties

TimeSpan duur = new TimeSpan(2, 5, 30, 45);  // 2 dagen, 5u, 30min, 45sec

// Onderdelen (hele getallen)
Console.WriteLine(duur.Days);         // 2
Console.WriteLine(duur.Hours);        // 5
Console.WriteLine(duur.Minutes);      // 30
Console.WriteLine(duur.Seconds);      // 45

// Totalen (kommagetallen)
Console.WriteLine(duur.TotalDays);      // 2,2296875
Console.WriteLine(duur.TotalHours);     // 53,5125
Console.WriteLine(duur.TotalMinutes);   // 3210,75
Console.WriteLine(duur.TotalSeconds);   // 192645

TimeSpan berekeningen

TimeSpan duur1 = TimeSpan.FromHours(2);
TimeSpan duur2 = TimeSpan.FromMinutes(30);

// Optellen
TimeSpan totaal = duur1 + duur2;  // 2u 30min
Console.WriteLine(totaal);        // 02:30:00

// Aftrekken
TimeSpan verschil = duur1 - duur2;  // 1u 30min
Console.WriteLine(verschil);        // 01:30:00

// Vermenigvuldigen
TimeSpan dubbel = duur1 * 2;  // 4 uur
Console.WriteLine(dubbel);    // 04:00:00

TimeSpan formatteren

TimeSpan duur = new TimeSpan(2, 5, 30, 45);

// Standaard formaat
Console.WriteLine(duur.ToString());  // 2.05:30:45

// Custom formaat
Console.WriteLine(duur.ToString(@"d\.hh\:mm\:ss"));      // 2.05:30:45
Console.WriteLine(duur.ToString(@"hh\:mm"));             // 05:30
Console.WriteLine($"{duur.Days}d {duur.Hours}u {duur.Minutes}min");  // 2d 5u 30min

7. Praktische voorbeelden

Afteller tot een gebeurtenis

DateTime nieuwjaar = new DateTime(2026, 1, 1, 0, 0, 0);
DateTime nu = DateTime.Now;
TimeSpan verschil = nieuwjaar - nu;

if (verschil.TotalSeconds > 0)
{
    Console.WriteLine($"Nog {verschil.Days} dagen, {verschil.Hours} uren en {verschil.Minutes} minuten tot Nieuwjaar!");
}
else
{
    Console.WriteLine("Gelukkig Nieuwjaar!");
}

Werktijd berekenen

DateTime startWerk = new DateTime(2025, 11, 12, 9, 0, 0);
DateTime eindeWerk = new DateTime(2025, 11, 12, 17, 30, 0);
TimeSpan pauze = TimeSpan.FromMinutes(45);

TimeSpan totaleAanwezigheid = eindeWerk - startWerk;
TimeSpan werkelijkWerktijd = totaleAanwezigheid - pauze;

Console.WriteLine($"Aanwezig: {totaleAanwezigheid.TotalHours:F2} uur");
Console.WriteLine($"Werkelijk gewerkt: {werkelijkWerktijd.TotalHours:F2} uur");

Is het een schrikkeljaar?

int jaar = 2024;
bool isSchrikkeljaar = DateTime.IsLeapYear(jaar);

if (isSchrikkeljaar)
{
    Console.WriteLine($"{jaar} is een schrikkeljaar (366 dagen)");
}
else
{
    Console.WriteLine($"{jaar} is geen schrikkeljaar (365 dagen)");
}

Hoeveel dagen in een maand?

int jaar = 2025;
int maand = 2;  // februari
int aantalDagen = DateTime.DaysInMonth(jaar, maand);

Console.WriteLine($"Februari {jaar} heeft {aantalDagen} dagen");

Alle dagen van een week tonen

DateTime startWeek = DateTime.Today;

// Ga naar de eerste dag van deze week (maandag)
while (startWeek.DayOfWeek != DayOfWeek.Monday)
{
    startWeek = startWeek.AddDays(-1);
}

Console.WriteLine("Deze week:");
for (int i = 0; i < 7; i++)
{
    DateTime dag = startWeek.AddDays(i);
    Console.WriteLine($"{dag.ToString("dddd dd/MM")}: {dag.DayOfWeek}");
}

Tijd meten van code-uitvoering

DateTime start = DateTime.Now;

// Doe iets dat tijd kost
for (int i = 0; i < 1000000; i++)
{
    // Berekening...
}

DateTime einde = DateTime.Now;
TimeSpan uitvoeringstijd = einde - start;

Console.WriteLine($"Code duurde {uitvoeringstijd.TotalMilliseconds} milliseconden");

8. Belangrijke tips en veelgemaakte fouten

❌ DateTime is immutable!

DateTime datum = new DateTime(2025, 1, 1);
datum.AddDays(5);  // ❌ FOUT! Dit verandert 'datum' NIET

// βœ… JUIST: ken het resultaat toe aan een variabele
DateTime nieuweDatum = datum.AddDays(5);

❌ Month begint bij 1 (niet 0)

DateTime datum1 = new DateTime(2025, 1, 15);   // βœ… Januari (maand 1)
DateTime datum2 = new DateTime(2025, 0, 15);   // ❌ ERROR! Maand 0 bestaat niet

βœ… Let op bij maandberekeningen

DateTime datum = new DateTime(2025, 1, 31);  // 31 januari
DateTime volgendeMaand = datum.AddMonths(1); // 28 februari! (geen 31 februari)

βœ… Gebruik UTC voor opslag, lokale tijd voor weergave

// Opslaan in database: gebruik UTC
DateTime tijdstempelDatabase = DateTime.UtcNow;

// Tonen aan gebruiker: gebruik lokale tijd
DateTime tijdstempelWeergave = DateTime.Now;

Samenvatting belangrijkste methodes en properties

DateTime aanmaken

DateTime properties

DateTime methodes

TimeSpan


Dit naslagwerk bevat de belangrijkste functionaliteiten van DateTime. Bewaar het goed, want je zult het regelmatig nodig hebben! Voor meer gedetailleerde informatie kun je altijd de officiΓ«le Microsoft documentatie raadplegen.