0%

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.fromisoformat accepteert een ISO-datumstring en geeft een date-waarde terug;

  • de ene date van de andere aftrekken geeft een timedelta terug;

  • een timedelta biedt via .days de afstand in hele dagen.

Probeer het contract uit in een klein voorbeeld:

Try it

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).days terug.

  • Behoud het negatieve resultaat wanneer het einde vóór het begin ligt.

  • Laat ongeldige ISO-datumtekst een ValueError opwerpen.

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.