Ga naar hoofdinhoud

Python datetime: zo werk je met datums en tijden in Python

Leer de verschillende manieren om met de datetime-tools van Python te werken en maak alles eenvoudiger, van het ontleden van strings tot het beheren van tijdzone-bewuste timestamps.
Bijgewerkt 2 okt 2026  · 2 min lezen

Verken met AI

ChatGPTClaudePerplexity

Werken met datums en tijden lijkt simpel totdat je te maken krijgt met formats, tijdzones, zomer-/wintertijdregels of timestamps uit meerdere systemen. Op dat moment is het geen optie meer om tijd als ruwe strings of integers op te slaan. Python’s datetime-module helpt je al deze bewegende delen op een voorspelbare manier te beheren.

Deze gids loopt door de kernklassen heen, hoe je datetime-objecten maakt en gebruikt, hoe je rekenwerk uitvoert, waarden opmaakt en ontleedt, tijdzones afhandelt en meer. Elke sectie bouwt voort op de vorige, zodat je van basisbewerkingen naar meer gevorderde patronen kunt gaan.

Kernklassen van de Python datetime-module

Voor je iets specifieks doet, helpt het om te begrijpen hoe Python datums en tijden conceptueel modelleert. De datetime-module gebruikt een kleine set klassen, elk gericht op één deel van het probleem. Als je weet waar elke klas past, wordt de rest van de workflow veel eenvoudiger.

date

Als je alleen een kalenderdatum nodig hebt zonder je zorgen te maken over tijdstip of tijdzones, is de date-klasse wat je nodig hebt. Deze vertegenwoordigt het jaar, de maand en de dag via vertrouwde attributen.

Dit zijn de attributen:

  • year

  • month

  • day

En de methoden:

  • today()

  • fromisoformat()

  • replace()

  • isoformat()

  • weekday()

  • isoweekday()

from datetime import date
d = date(2025, 3, 1)
print(d)

Deze code creëert een eenvoudige kalenderdatum. Als je een ongeldige combinatie invoert (zoals February 30), geeft Python een ValueError.

time

Sommige taken kijken alleen naar het tijdstip, bijvoorbeeld een herinnering die om 14:30 draait. De time-klasse is dan handig, omdat die uren, minuten, seconden en (niet nodig voor dit voorbeeld) microseconden of tijdzonegegevens opslaat.

De attributen zijn: hour, minute, second, microsecond, tzinfo

De methoden zijn: replace(), isoformat()

from datetime import time
t = time(14, 30, 15)
print(t)

Dit creëert een kloktijd zonder gekoppelde datum. Ongeldige waarden (zoals hour=27) genereren een fout.

datetime

De meeste situaties in de echte wereld combineren zowel datum als tijd, en daar komt datetime om de hoek. Het is de meest veelzijdige klasse in de module en degene die je het vaakst zult gebruiken voor logging, verwerking en het coördineren van events.

De attributen zijn (naast alle bovenstaande): tzinfo

En de methoden zijn now(), utcnow(), fromisoformat(), strptime(), strftime(), astimezone(). Het ondersteunt ook rekenwerk met timedelta, waar ik zo dieper op inga.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Dit levert een volledige timestamp op met zowel datum- als tijdcomponenten.

timedelta

Wanneer je verstreken tijd moet meten of een timestamp vooruit of achteruit moet verschuiven, is timedelta de juiste keuze. Het vertegenwoordigt een duur, geen specifiek moment.

De attributen zijn: days, seconds, microseconds. Het wordt vaak gebruikt voor offsets, tijdsverschillen en planningslogica.

from datetime import timedelta
delta = timedelta(days=7, hours=3)
print(delta)

Dit geeft een duur met vaste lengte weer. Het wordt vooral handig wanneer je het optelt bij of aftrekt van een datetime.

tzinfo

tzinfo definieert Python’s interface voor tijdzones. Je maakt deze niet direct zelf aan, maar het datetime-systeem gebruikt ze wanneer je tijdzones toevoegt of converteert.

timezone

timezone is een ingebouwde tzinfo-implementatie voor vaste UTC-offsets zoals UTC of UTC+1. Handig voor simpele gevallen waarbij zomer-/wintertijdregels niet van belang zijn.

Python datetime-objecten maken en benaderen

Als je de klassen kent, is de volgende stap leren hoe je er instanties van maakt. Python geeft je meerdere manieren, afhankelijk van waar je data vandaan komt: handmatige invoer, systeemtijd, timestamps of tekst.

Class-constructors gebruiken

Constructors geven je volledige controle over de waarden die je creëert. Dit is vaak de meest expliciete en foutbestendige manier om date-, time- of datetime-objecten op te bouwen.

from datetime import date
d = date(2025, 3, 1)
print(d)

Dit bouwt direct een kalenderdatum. Ongeldige waarden geven meteen een fout, waardoor je fouten vroeg opvangt.

from datetime import time
t = time(14, 30, 15)
print(t)

Dit levert een waarde voor tijdstip op. Gebruik dit wanneer je de datum niet nodig hebt.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt)

Dit creëert een volledige timestamp. Een tzinfo-argument toevoegen maakt het tijdzone-bewust.

Maken vanuit timestamps

Unix-timestamps komen voor in logs, API’s en besturingssystemen. Python zet ze eenvoudig om naar voor mensen leesbare datetime-objecten.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

De eerste interpreteert de timestamp in lokale tijd; de tweede interpreteert hem in UTC.

Classmethoden voor huidige waarden

Als je de huidige datum of tijd nodig hebt, biedt Python eenvoudige helpers. Die zijn essentieel voor logging, eventtracking en real-time pipelines.

from datetime import datetime, date, timezone
print(date.today())
print(datetime.now())
print(datetime.now(tz=timezone.utc))  # Python 3.12+ preferred

Deze geven je de huidige systeemtijd in lokale tijd of UTC, afhankelijk van wat je nodig hebt.

datetime.fromtimestamp(1700000000)
datetime.utcfromtimestamp(1700000000)

Deze zetten epoch-timestamps om in datetime-objecten. Ze komen extreem vaak voor bij het parseren van API- of databasewaarden.

Ontleden vanuit strings

Datasets in de praktijk slaan timestamps vaak als tekst op. Python biedt betrouwbare tools om die strings om te zetten naar gestructureerde waarden.

strptime()
from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

strptime() ontleedt een string met een opmaakpatroon. Als de string niet exact overeenkomt, geeft Python ValueError.

from datetime import datetime
dt = datetime.strptime("not-a-date", "%Y-%m-%d")

Dit zal mislukken omdat de invoer niet overeenkomt met het verwachte patroon.

fromisoformat()
datetime.fromisoformat("2025-03-01T14:30:00")

ISO 8601-strings laten zich probleemloos ontleden omdat de structuur gestandaardiseerd is. Dit is vaak de makkelijkste manier om timestamps uit API’s of moderne datapipelines te laden.

Datumaritmetiek uitvoeren

Zodra je timestamps kunt maken, is de volgende stap ermee werken. Dat kan door duur te berekenen, datums te verschuiven of intervallen te vergelijken.

Timedelta voor temporele berekeningen

timedelta modelleert perioden met vaste duur zoals “5 uur” of “2 weken”. Deze perioden zijn handig voor planning, logging en als je een eenvoudige afteltimer nodig hebt.

from datetime import datetime, timedelta
dt = datetime(2025, 3, 1, 14, 30)
new_dt = dt + timedelta(days=5)
print(new_dt)

Dit voorbeeld verschuift de timestamp vijf dagen vooruit.

start = datetime(2025, 3, 1, 9, 0)
end = datetime(2025, 3, 1, 14, 30)
duration = end - start
print(duration.total_seconds())

Hier levert het aftrekken van twee datetimes een timedelta op, die je kunt omzetten naar seconden, dagen of uren.

Vaste duur versus kalenderbewuste rekenkunde

Niet alle tijdseenheden zijn gelijk. Maanden verschillen in lengte, jaren kunnen schrikkeldagen hebben en het einde-van-de-maandgedrag kan onvoorspelbaar zijn. Voor deze scenario’s is timedelta niet genoeg.

dateutil.relativedelta behandelt “kalenderbewuste” rekenkunde:

from dateutil.relativedelta import relativedelta
from datetime import date
d = date(2025, 1, 31)
print(d + relativedelta(months=1))

Dit gaat correct om met het ontbrekende “31 februari”-scenario door de datum passend te verschuiven.

Datums opmaken en ontleden

Datetime-opmaak kom je overal tegen: API’s verwachten specifieke formats, gebruikers willen leesbare tekst en logs zijn afhankelijk van consistente timestamp-strings. Python ondersteunt zowel flexibele opmaak als gestandaardiseerde weergaven.

Strings opmaken met strftime

strftime() laat je datetime-objecten omzetten naar opgemaakte strings met behulp van vooraf gedefinieerde codes.

from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30)
print(dt.strftime("%A, %B %d, %Y at %H:%M"))

Dit print een voor mensen leesbare string met de weekdag en de volledige maandnaam.

dt.strftime("%Y-%m-%dT%H:%M:%S")

Dit produceert een ISO-achtige string die geschikt is voor dataopslag of API’s.

Strings ontleden met strptime

from datetime import datetime
dt = datetime.strptime("2025-03-01 14:30", "%Y-%m-%d %H:%M")
print(dt)

Dit zet tekst om in een datetime-object. Elke mismatch tussen de string en het patroon geeft een fout.

Werken met ISO 8601 en RFC 3339

ISO 8601 lost de ambiguïteit op die in veel regionale datumformaten voorkomt. Python ondersteunt dit standaard:

from datetime import datetime
dt = datetime.fromisoformat("2025-03-01T14:30:00")
print(dt.isoformat())

Dit is het veiligste format bij het uitwisselen van data tussen systemen, API’s of databases.

Tijdzones afhandelen

Tijdzones brengen enkele van de lastigste uitdagingen mee in temporeel programmeren. Python helpt door onderscheid te maken tussen naïeve en bewuste datetime-objecten en tools te bieden voor tijdzones in de echte wereld.

Naïeve vs. bewuste datetime-objecten

Een naïeve datetime heeft geen tijdzone:

from datetime import datetime
naive_dt = datetime(2025, 3, 1, 14, 30)
print(naive_dt.tzinfo)  # None

Een bewuste datetime bevat een tijdzone-offset:

from datetime import timezone, timedelta
aware_dt = naive_dt.replace(tzinfo=timezone(timedelta(hours=1)))
print(aware_dt)

Het mixen van naïeve en bewuste waarden in vergelijkingen of rekenwerk veroorzaakt meestal fouten.

De module zoneinfo gebruiken

Python's zoneinfo-module biedt toegang tot echte IANA-tijdzones:

from zoneinfo import ZoneInfo
from datetime import datetime
dt = datetime(2025, 3, 1, 14, 30, tzinfo=ZoneInfo("Europe/Paris"))
print(dt)

Tijdzoneconversie is eenvoudig:

dt.astimezone(ZoneInfo("America/New_York"))

Dit drukt exact hetzelfde moment uit in een andere lokale tijdzone.

Converteren tussen tijdzones

Je kunt elke bewuste timestamp naar een andere zone converteren met astimezone():

from zoneinfo import ZoneInfo
dt_ny = dt.astimezone(ZoneInfo("America/New_York"))
print(dt_ny)

Een veelgebruikte best practice is om timestamps in UTC op te slaan en pas voor weergave te converteren.

Datums vergelijken en filteren

Vergelijkingen komen in bijna elke workflow voor. Denk aan het sorteren van logs, het filteren van events of bepalen of iets voor of na een drempel plaatsvond.

from datetime import datetime
a = datetime(2025, 3, 1, 12, 0)
b = datetime(2025, 3, 1, 15, 0)
print(a < b)  # True

Tijdzonebewuste vergelijkingen houden rekening met offsets:

from datetime import datetime
from zoneinfo import ZoneInfo
dt1 = datetime(2025, 3, 1, 12, 0, tzinfo=ZoneInfo("Europe/London"))
dt2 = datetime(2025, 3, 1, 7, 0, tzinfo=ZoneInfo("America/New_York"))
print(dt1 == dt2)  # True — same moment in time

Collecties filteren werkt natuurlijk:

dates = [
    datetime(2025, 3, 1, 10),
    datetime(2025, 2, 20, 9),
    datetime(2025, 3, 1, 8)
]
cutoff = datetime(2025, 3, 1)
filtered = [d for d in dates if d >= cutoff]
print(filtered)

Normaliseren naar UTC is handig wanneer je met meerdere zones werkt.

Meer geavanceerde use-cases

Datetime duikt op in veel workflows buiten basis-ontleding en rekenwerk. Hier zijn een paar patronen die je vaak zult tegenkomen.

Unix-timestamps

Unix-timestamps meten seconden sinds 1 januari 1970 (UTC). Ze worden veel gebruikt in system programming en API’s.

from datetime import datetime
dt = datetime.fromtimestamp(1700000000)
print(dt)

Milliseconden en microseconden vereisen schalen:

ts_ms = 1700000000000
dt_ms = datetime.fromtimestamp(ts_ms / 1000)

ts_us = 1700000000000000
dt_us = datetime.fromtimestamp(ts_us / 1_000_000)

Plannen en timers

Bibliotheken zoals schedule zijn afhankelijk van datetime-waarden om te bepalen wanneer taken moeten draaien. Of je nu functies om de paar seconden triggert of een eenmalig event later op de dag plant, datetime vormt de basis voor die vergelijkingen.

Patronen voor data-analyse

Datetime-attributen worden vaak geëxtraheerd voor groepering en tijdgebaseerde analyse:

dt = datetime(2025, 3, 1, 14, 30)
print(dt.year)
print(dt.isocalendar())

In pandas is resamplen per periode extreem gebruikelijk:

import pandas as pd
df = pd.DataFrame({
    "value": [10, 12, 15],
    "timestamp": pd.to_datetime([
        "2025-03-01",
        "2025-03-02",
        "2025-03-08"
    ])
}).set_index("timestamp")

print(df.resample("W").sum())

Conclusie

Wil je meer leren over datetime, bekijk dan deze video uit onze cursus Working with Dates and Times in Python door Max Shrom en Data Types for Data Science in Python door Jason Myers. 

Misschien vind je onze tutorial Converting Strings to Dates as datetime Objects ook nuttig als je extra hulp nodig hebt bij het converteren van strings.


Oluseye Jeremiah's photo
Author
Oluseye Jeremiah
LinkedIn

Techschrijver gespecialiseerd in AI, ML en data science, die complexe ideeën helder en toegankelijk maakt.

Onderwerpen
Python

Leer Python met DataCamp

Cursus

Introductie tot Python

4 uur
7.1M
Leer de basis van data-analyse met Python in 4 uur. Deze online cursus laat je kennismaken met de Python-interface en populaire pakketten.
Bekijk detailsRight Arrow
Start Cursus
Meer bekijkenRight Arrow
Gerelateerd

blog

AI vanaf nul leren in 2026: een complete gids van de experts

Ontdek alles wat je moet weten om in 2026 AI te leren, van tips om te beginnen tot handige resources en inzichten van industrie-experts.
Adel Nehme's photo

Adel Nehme

15 min

Meer BekijkenMeer Bekijken