Direct naar de hoofdinhoud
Module 8 · Les 2 van 430/36 in de cursus~12 min
Modulelessen (2/4)

datetime: datums en tijden

De module datetime biedt de klassen om datums en tijden weer te geven.

De drie hoofdklassen

  • date — alleen datum (jaar, maand, dag)
  • time — alleen tijd (uur, minuut, seconde, microseconde)
  • datetime — datum + tijd samen
  • timedelta — een duur (verschil tussen twee momenten)
Python
from datetime import date, time, datetime, timedelta

date(2025, 1, 1)                  # datetime.date(2025, 1, 1)
time(14, 30, 0)                   # datetime.time(14, 30)
datetime(2025, 1, 1, 14, 30, 0)   # datetime.datetime(2025, 1, 1, 14, 30)

"Nu": now en today

Python
datetime.now()        # current date + time
date.today()          # current date only

Rekenen met timedelta

Python
from datetime import datetime, timedelta

ora = datetime(2025, 1, 1, 12, 0)
domani = ora + timedelta(days=1)
una_ora_fa = ora - timedelta(hours=1)

# difference between two datetimes -> timedelta
delta = domani - ora
delta.days        # 1
delta.total_seconds()   # 86400.0

timedelta accepteert days, seconds, microseconds, milliseconds, minutes, hours, weeks (NIET months of years, die dubbelzinnig zijn).

Opmaak: strftime

Transformeert datetime → string volgens een patroon.

Python
ora = datetime(2025, 1, 1, 14, 30)
ora.strftime("%Y-%m-%d")         # '2025-01-01'
ora.strftime("%d/%m/%Y %H:%M")   # '01/01/2025 14:30'
ora.strftime("%A %d %B %Y")      # 'Wednesday 01 January 2025' (locale-dependent)

Meest gebruikte richtlijnen: %Y jaartal van 4 cijfers, %m maand van 2 cijfers, %d dag van 2 cijfers, %H 24 uur, %M minuten, %S seconden.

Parseren: strptime

Het tegenovergestelde: string → datetime, gegeven het verwachte patroon.

Python
datetime.strptime("01/01/2025", "%d/%m/%Y")
# datetime.datetime(2025, 1, 1, 0, 0)

ISO8601

Geef voor gegevensuitwisseling altijd de voorkeur aan het ISO 8601-formaat (YYYY-MM-DDTHH:MM:SS):

Python
ora.isoformat()                 # '2025-01-01T14:30:00'
datetime.fromisoformat("2025-01-01T14:30:00")

Tijdzones en bewuste datetimes

Standaard zijn datetime objecten in Python naïef (wat betekent dat ze geen tijdzone-informatie bevatten). Voor toepassingen in de echte wereld is het een goede gewoonte om ze bewust te maken door tijdzone-informatie in te stellen via datetime.timezone.utc of door de module zoneinfo te gebruiken.

Probeer het

Oefening#python.m8.l2.e1
Pogingen: 0Laden…

Bereken de datum 30 dagen na 1 januari 2025 en noteer deze als 'JJJJ-MM-DD' in de variabele 'date_str'. Evalueer `date_str`.

Editor laden…
Toon hint

basis + timedelta(dagen=30), dan .strftime

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m8.l2.e2
Pogingen: 0Laden…

Gegeven de string `s = '15/03/2025'`, parseer deze met strptime in de variabele `d` (datetime object). Evalueer de gehele dag van de week `d.weekday()` (0=Ma, 6=Zon).

Editor laden…
Toon hint

strptime met het patroon in Italiaans formaat.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m8.l2.e3
Pogingen: 0Laden…

Import `date` from the `datetime` module. Calculate the difference in days between December 25, 2026 (`date(2026, 12, 25)`) and December 20, 2026 (`date(2026, 12, 20)`). Store the integer number of days (using the `.days` attribute of the delta) in `days_diff`. Finally, evaluate the variable.

Editor laden…
Toon hint

The difference between two dates returns a timedelta. Access the integer days with delta.days.

Oplossing beschikbaar na 3 pogingen