De standaardbibliotheek bestaat al · oefening
Tijd meten met datetime
De eerste taak van het overzicht klinkt eenvoudig: bepalen hoeveel dagen er tussen twee datums zitten. De gegevens komen binnen als tekst zoals "2026-08-03". Die strings van elkaar aftrekken zou voor Python geen kalenderberekening zijn.
De documentatie van datetime wijst de weg:
date.fromisoformataccepteert een ISO-datumstring en geeft eendate-waarde terug;de ene
datevan de andere aftrekken geeft eentimedeltaterug;een
timedeltabiedt via.daysde afstand in hele dagen.
Probeer het contract uit in een klein voorbeeld:
Het resultaat is 8, niet 9: dit is de afstand tussen datums, geen telling van kalenderdagen inclusief beide uiteinden. Draai je de twee datums om, dan krijg je -8. We behouden dat teken, omdat het nuttige informatie bewaart in plaats van per ongeluk omgedraaide invoer te verbergen.
Laat de API haar foutcontract behouden
date.fromisoformat("next Tuesday") werpt ValueError op. Dat is op deze laag nuttig. days_between weet niet of een toekomstige interface opnieuw moet vragen, een gegevensrij moet afwijzen of een fout moet tonen. De fout hier opvangen zou dat beleid in een kleine conversiefunctie vastleggen.
Het latere hoofdstuk over foutafhandeling bepaalt wat een interface hoort te doen. Laat de gedocumenteerde exception voorlopig de aanroeper bereiken.
Wat geeft date.fromisoformat("2026-08-11") terug?
Implementeer days_between in de werkruimte. Probeer vóór het inleveren een paar eigen datumparen, waaronder twee keer dezelfde dag en een paar in omgekeerde volgorde.
Opdracht
Implementeer days_between(start_text, end_text) in activity_report.py.
Verwerk beide argumenten met
datetime.date.fromisoformat.Geef
(end_date - start_date).daysterug.Behoud het negatieve resultaat wanneer het einde vóór het begin ligt.
Laat ongeldige ISO-datumtekst een
ValueErroropwerpen.
Je mag de module datetime importeren of daaruit date importeren. Een andere naam geven aan een van beide imports is ook goed; het publieke gedrag en de gedocumenteerde API vormen het contract.