Fouten door zomertijd: regels voor tijdstempels en rapporten
Praktische regels om fouten door zomertijd te voorkomen: sla duidelijke tijdstempels op, toon de juiste lokale tijd en maak rapporten die gebruikers kunnen verifiëren en vertrouwen.

Waarom deze fouten in normale producten voorkomen
Tijdproblemen verschijnen in gewone producten omdat mensen niet in UTC leven. Mensen leven in lokale tijd, en lokale tijd kan vooruit springen, terugvallen of regels door de jaren heen veranderen. Twee gebruikers kunnen naar hetzelfde moment kijken en verschillende klokken zien. Nog erger: dezelfde lokale kloktijd kan naar twee verschillende echte momenten verwijzen.
Zomertijdfouten (DST) verschijnen vaak maar twee keer per jaar, dus ze glippen erdoor. Alles lijkt in ontwikkeling in orde, maar een echte klant boekt een afspraak, vult een urenstaat in of bekijkt een rapport in het wisselweekend en er voelt iets niet goed.
Teams herkennen meestal eerst een paar patronen: een “ontbrekend uur” waarbij geplande items verdwijnen of verspringen, een gedupliceerd uur waarbij logs of waarschuwingen dubbel lijken, en dagelijkse totalen die drift vertonen omdat een “dag” 23 of 25 uur was.
Dit is niet alleen een ontwikkelaarsprobleem. Support krijgt tickets zoals “jullie app heeft mijn vergadering verzet.” Finance ziet niet-overeenkomende dagelijkse omzet. Ops vraagt zich af waarom nachtelijke jobs twee keer draaiden of werden overgeslagen. Zelfs filters als “vandaag aangemaakt” kunnen verschillen tussen gebruikers in verschillende regio’s.
Het doel is saai en betrouwbaar: sla tijd op zodat die nooit betekenis verliest, toon lokale tijd zoals mensen die verwachten, en bouw rapporten die waar blijven, ook op rare dagen. Als je dat doet, kan elk deel van het bedrijf de cijfers vertrouwen.
Of je nu met eigen code bouwt of een platform zoals AppMaster gebruikt, de regels zijn hetzelfde. Je wilt tijdstempels die het oorspronkelijke moment behouden, plus genoeg context (zoals de tijdzone van de gebruiker) om uit te leggen hoe dat moment op hun klok uitzag.
Een kort, eenvoudig model van tijd
De meeste DST-fouten ontstaan omdat we “een moment in de tijd” verwarren met “hoe een klok het toont”. Houd die ideeën apart en de regels worden veel eenvoudiger.
Een paar termen, in gewone taal:
- Tijdstempel: een precies moment op de tijdslijn (onafhankelijk van waar je bent).
- UTC: een globale referentieklok die tijdstempels consistent vertegenwoordigt.
- Lokale tijd: wat iemand op een wandklok ziet op een plek (bijv. 9:00 in New York).
- Offset: het verschil met UTC op een bepaald moment, geschreven als +02:00 of -05:00.
- Tijdzone: een naamset regels die bepaalt welke offset geldt voor elke datum, zoals America/New_York.
Een offset is niet hetzelfde als een tijdzone. -05:00 vertelt je alleen het verschil met UTC op één moment. Het vertelt je niet of die plaats in de zomer naar -04:00 gaat, of dat wetten volgend jaar veranderen. Een tijdzone-naam wel, omdat die regels en geschiedenis bevat.
Zomertijd verandert de offset, niet de onderliggende tijdstempel. De gebeurtenis gebeurde nog steeds op hetzelfde moment; alleen het lokale kloklabel verandert.
Twee gevallen veroorzaken de meeste verwarring:
- Voorjaar — overslaan: de klok gaat vooruit, waardoor een reeks lokale tijden niet bestaan (bijvoorbeeld 02:30 kan onmogelijk zijn).
- Herfst — herhaling: de klok gaat terug, waardoor dezelfde lokale tijd twee keer voorkomt (bijvoorbeeld 01:30 kan ambigu zijn).
Als een supportticket wordt aangemaakt om “01:30” tijdens de herfstherhaling, heb je de tijdzone en het exacte moment (UTC-tijdstempel) nodig om gebeurtenissen correct te ordenen.
Dataregels die de meeste problemen voorkomen
De meeste DST-fouten beginnen als een data-probleem, niet als een formatteringsprobleem. Als de opgeslagen waarde onduidelijk is, moet elk scherm en rapport later raden, en die gokken zullen verschillen.
Regel 1: Sla echte gebeurtenissen op als een absoluut moment (UTC)
Als iets op een specifiek moment gebeurde (een betaling die werd afgeschreven, een ticket waarop gereageerd is, een dienst die startte), sla dan de tijdstempel in UTC op. UTC springt niet vooruit of achteruit, dus het blijft stabiel bij DST-wissels.
Voorbeeld: een supportmedewerker in New York antwoordt om 09:15 lokale tijd op de dag dat de klok verandert. Het opslaan van het UTC-moment houdt dat antwoord in de juiste volgorde wanneer iemand in Londen later de thread bekijkt.
Regel 2: Bewaar tijdzonecontext als een IANA-tijdzone-ID
Als je de tijd op een menselijke manier wilt tonen, moet je de tijdzone van de gebruiker of locatie kennen. Sla die op als een IANA-tijdzone-ID zoals America/New_York of Europe/London, niet als een vage aanduiding zoals “EST.” Afkortingen kunnen meerdere betekenissen hebben en offsets alleen dekken geen DST-regels.
Een simpel patroon is: evenementtijd in UTC, plus een apart tijdzone-ID gekoppeld aan de gebruiker, het kantoor, de winkel of het apparaat.
Regel 3: Sla datum-only waarden op als datums, niet als tijdstempels
Sommige waarden zijn geen momenten in de tijd. Verjaardagen, “vernieuwt op de 5e” en “factuurvervaldatum” moeten vaak als een datumveld worden opgeslagen. Als je ze als tijdstempel opslaat, kunnen tijdzoneconversies ze naar de vorige of volgende dag verplaatsen.
Regel 4: Sla nooit lokale tijd op als platte tekst zonder zonecontext
Vermijd het opslaan van waarden zoals “2026-03-08 02:30” of “9:00 AM” zonder tijdzone. Die tijd kan ambigu zijn (tweemaal voorkomen) of onmogelijk (overgeslagen) tijdens DST-transities.
Als je lokale invoer moet accepteren, sla dan zowel de lokale waarde als de tijdzone-ID op en converteer naar UTC voor het daadwerkelijke gebeurtenismoment.
Bepalen wat je opslaat per soort record
Veel DST-fouten ontstaan omdat één recordtype als een ander wordt behandeld. Een auditlog-entry, een kalenderafspraak en een payroll-cutoff lijken allemaal op “een datum en tijd”, maar ze hebben verschillende data nodig om correct te blijven.
Voor gebeurtenissen in het verleden (dingen die al gebeurd zijn): sla een exact moment op, meestal een UTC-tijdstempel. Als je ooit moet uitleggen hoe de gebruiker het zag, sla dan ook de tijdzone van de gebruiker op ten tijde van het evenement (een IANA-ID zoals America/New_York, niet alleen “EST”). Zo kun je reconstrueren wat het scherm toonde, zelfs als de gebruiker later zijn profieltijdzone wijzigt.
Voor planning (dingen die op een lokale kloktijd moeten gebeuren): sla de bedoelde lokale datum en tijd plus de tijdzone-ID op. Converteer die niet naar UTC en gooi het origineel weg. “10 maart om 09:00 in Europe/Berlin” is de intentie. UTC is een afgeleide waarde die kan veranderen wanneer regels wijzigen.
Veranderingen zijn normaal: mensen reizen, kantoren verhuizen, bedrijven passen beleid aan. Voor historische records herschrijf geen oude tijden wanneer een gebruiker later zijn profieltijdzone wijzigt. Voor toekomstige afspraken bepaal of het schema de gebruiker volgt (reisvriendelijk) of een vaste locatie volgt (kantoorvriendelijk) en sla die locatie-tijdzone op.
Legacydata met alleen lokale tijdstempels is lastig. Als je de bron-tijdzone kent, voeg die toe en behandel de oude tijd als lokaal. Als je het niet weet, markeer het als “floating” en wees eerlijk in rapporten (bijvoorbeeld: toon de opgeslagen waarde zonder conversie). Het helpt ook om deze als aparte velden te modelleren zodat schermen en rapporten ze niet per ongeluk mengen.
Stapsgewijs: tijdstempels veilig opslaan
Om DST-fouten te stoppen, kies één ondubbelzinnig systeem van record voor tijd en converteer alleen bij weergave naar mensen.
Schrijf de regel op voor je team: alle tijdstempels in de database zijn UTC. Zet het in documentatie en in codecommentaar nabij datumverwerking. Dit is zo’n beslissing die per ongeluk later ongedaan wordt gemaakt.
Een praktisch opslagpatroon ziet er zo uit:
- Kies UTC als systeem van record en noem velden zo dat het duidelijk is (bijv.
created_at_utc). - Voeg de velden toe die je echt nodig hebt: een gebeurtenistijd in UTC (bijv.
occurred_at_utc) en eentz_idwanneer lokale context belangrijk is (gebruik een IANA-tijdzone-ID zoalsAmerica/New_York, niet een vaste offset). - Bij invoer: verzamel lokale datum en tijd plus
tz_id, converteer éénmaal naar UTC aan de rand (API of formulierverzending). Converteer niet meerdere keren over lagen heen. - Sla op en query in UTC. Converteer naar lokale tijd alleen aan de randen (UI, e-mails, exports).
- Voor kritieke acties (betalingen, compliance, planning) log ook wat je binnenkreeg (originele lokale string,
tz_iden de berekende UTC). Dat geeft een audittrail bij geschillen.
Voorbeeld: een gebruiker plant “5 nov, 9:00 AM” in America/Los_Angeles. Je slaat occurred_at_utc = 2026-11-05T17:00:00Z en tz_id = America/Los_Angeles op. Zelfs als DST-regels later veranderen, kun je nog steeds uitleggen wat ze bedoelden en wat je vastlegde.
Als je dit in PostgreSQL modelleert (ook via visuele datamodelleringstools), maak kolomtypen expliciet en consistent en dwing af dat je app elke keer UTC schrijft.
Lokale tijd tonen die gebruikers begrijpen
De meeste DST-fouten verschijnen in de UI, niet in de database. Mensen lezen wat je toont, kopiëren het in berichten en plannen erop. Als het scherm onduidelijk is, zullen gebruikers het verkeerd interpreteren.
Wanneer tijd ertoe doet (boekingen, tickets, afspraken, bezorgvensters), toon het als een bon: compleet, specifiek en gelabeld.
Houd de weergave voorspelbaar:
- Toon datum + tijd + tijdzone (voorbeeld: “10 mrt 2026, 9:30 AM America/New_York”).
- Zet het tijdzone-label naast de tijd, niet verborgen in instellingen.
- Als je relatieve tekst toont (“over 2 uur”), houd dan de exacte timestamp in de buurt.
- Voor gedeelde items: overweeg zowel de lokale tijd van de kijker als de tijdzone van het evenement te tonen.
DST-randgevallen hebben expliciet gedrag nodig. Als je gebruikers elke tijd laat typen, accepteer je vroeg of laat een tijd die nooit bestaat of twee keer voorkomt.
- Voorjaar (ontbrekende tijden): blokkeer ongeldige selecties en bied de eerstvolgende geldige tijd aan.
- Herfst (ambiguë tijden): toon de offset of een duidelijke keuze (bijv. “1:30 AM UTC-4” versus “1:30 AM UTC-5”).
- Bewerken van bestaande records: behoud het oorspronkelijke moment, ook als de presentatie verandert.
Voorbeeld: een supportmedewerker in Berlijn plant een call met een klant in New York op “3 nov, 1:30 AM.” Tijdens de herfstherhaling komt die tijd twee keer voor in New York. Als de UI “3 nov, 1:30 AM (UTC-4)” toont, is de verwarring verdwenen.
Rapporten bouwen die niet liegen
Rapporten verbreken vertrouwen als dezelfde data verschillende totalen geeft afhankelijk van waar de kijker zit. Om DST-fouten te vermijden: bepaal eerst waar een rapport eigenlijk op groepeert, en houd je daaraan.
Eerst: kies de betekenis van “dag” voor elk rapport. Een supportteam denkt vaak in de lokale dag van de klant. Finance heeft vaak de juridische tijdzone van het account nodig. Sommige technische rapporten zijn het veiligst in UTC-dagen.
Groeperen op lokale dag verandert totalen rond DST. Op de voorjaarsdag wordt één lokaal uur overgeslagen. Op de herfstdag wordt één lokaal uur herhaald. Als je gebeurtenissen groepeert op “lokale datum” zonder duidelijke regel, kan een druk uur ontbreken, dubbel lijken of naar de verkeerde dag verschuiven.
Een praktische regel: elk rapport heeft één rapportagetijdzone en die staat zichtbaar in de kop (bijv. “Alle datums getoond in America/New_York”). Dat maakt de berekening voorspelbaar en geeft support iets concreets om naar te wijzen.
Voor multi-regio teams is het prima om mensen de rapporttijdzone te laten wisselen, maar behandel dat als een ander perspectief op dezelfde feiten. Twee kijkers kunnen nabij middernacht en DST-wissels verschillende dagindelingen zien. Dat is normaal zolang het rapport de geselecteerde zone duidelijk vermeldt.
Enkele keuzes die de meeste verrassingen voorkomen:
- Definieer de daggrens van het rapport (gebruikerszone, accountzone of UTC) en documenteer het.
- Gebruik één tijdzone per rapport-run en toon die naast het datumbereik.
- Voor dagelijkse totalen: groepeer op lokale datum in de gekozen zone (niet op UTC-datum).
- Voor uurlijkse grafieken: label herhaalde uren op herfst-dagen.
- Voor duurmetingen: sla verstreken seconden op en formatteer voor weergave.
Duurmetingen vereisen speciale aandacht. Een “2-urige dienst” die over de herfstherhaling valt is op de klok 3 uur, maar voor verstreken tijd nog steeds 2 uur als iemand daadwerkelijk 2 uur werkte. Bepaal welke betekenis je gebruikers verwachten en pas consistente afronding toe (bijv. afronden na optellen, niet per regel).
Veelvoorkomende vallen en hoe ze te vermijden
DST-fouten zijn geen ‘moeilijke rekensom’. Ze komen door kleine aannames die geleidelijk insluipen.
Een klassieke fout is het opslaan van een lokale tijdstempel maar die labelen als UTC. Alles lijkt goed tot iemand in een andere tijdzone het record opent en het stilletjes verschuift. De veiligere regel is simpel: sla een instant op (UTC) plus de juiste context (gebruiker of locatie tijdzone) wanneer het record een lokale betekenis nodig heeft.
Een andere bron van fouten is het gebruik van vaste offsets zoals -05:00. Offsets kennen geen DST-wijzigingen of historische regels. Gebruik echte IANA-tijdzone-ID's (zoals America/New_York) zodat je systeem de juiste regel voor die datum kan toepassen.
Een paar gewoonten voorkomen veel ‘dubbele-dienst’-verrassingen:
- Converteer alleen aan de randen: parse input één keer, sla één keer op, toon één keer.
- Houd een duidelijke scheidslijn tussen “instant”-velden (UTC) en “wandklok”-velden (lokale datum/tijd).
- Sla de tijdzone-ID op naast records die lokale interpretatie nodig hebben.
- Maak de servertijdzone irrelevant door altijd UTC te lezen en te schrijven.
- Voor rapporten: definieer de rapporttijdzone en toon die in de UI.
Let ook op verborgen conversies. Een veelvoorkomend patroon is: parse de lokale tijd van een gebruiker naar UTC, daarna gaat een UI-library ervan uit dat de waarde lokaal is en converteert opnieuw. Het resultaat is een uurverschuiving die alleen bij sommige gebruikers en sommige datums verschijnt.
Gebruik tenslotte niet de tijdzone van het clientapparaat voor facturering of compliance. De telefoon van een reiziger kan midden in een reis van zone veranderen. Baseer dergelijke rapporten op een expliciete bedrijfsregel, zoals de accounttijdzone van de klant of een locatie van een site.
Testen: de paar gevallen die de meeste fouten vangen
De meeste tijdfouten komen maar een paar dagen per jaar voor, daarom glippen ze door QA. De oplossing is testen van de juiste momenten en die tests reproduceerbaar maken.
Kies één tijdzone die DST gebruikt (bijv. America/New_York of Europe/Berlin) en schrijf tests voor de twee overgangsdagen. Kies daarnaast één zone die nooit DST gebruikt (bijv. Asia/Singapore of Africa/Nairobi) zodat je het verschil duidelijk ziet.
De 5 tests die het waard zijn om te bewaren
- Voorjaarsdag (spring-forward): verifieer dat het ontbrekende uur niet kan worden ingepland en dat conversies geen tijden ‘maken’ die nooit bestonden.
- Herfstdag (fall-back): verifieer het gedupliceerde uur, waar twee verschillende UTC-momenten als dezelfde lokale tijd verschijnen. Zorg dat logs en exports ze kunnen onderscheiden.
- Overspanning middernacht: maak een evenement dat lokaal middernacht passeert en controleer dat sortering en groepering nog steeds werken wanneer het in UTC wordt bekeken.
- Niet-DST contrast: herhaal een conversie in een niet-DST-zone en bevestig dat resultaten stabiel blijven over dezelfde datums.
- Rapportage-snapshots: sla verwachte totalen op voor rapporten rond maandafsluiting plus het DST-weekend en vergelijk de output na elke wijziging.
Een concreet scenario
Stel: een supportteam plant een follow-up om “01:30” op de nacht van de herfstherhaling. Als je UI alleen de getoonde lokale tijd opslaat, kun je niet weten welke “01:30” ze bedoelden. Een goede test maakt beide UTC-tijdstempels die lokaal 01:30 geven en bevestigt dat de app ze onderscheidt.
Deze tests tonen snel of je systeem de juiste feiten opslaat (UTC-instant, tijdzone-ID en soms de originele lokale tijd) en of rapporten eerlijk blijven wanneer de klok verandert.
Korte checklist voordat je live gaat
Zomertijdfouten glippen erdoor omdat de app op de meeste dagen goed lijkt. Gebruik deze checklist voordat je iets uitrolt dat tijd toont, filtert op datum of rapporten exporteert.
- Kies één rapporttijdzone per rapport (bijv. “Business HQ-tijd” of “Gebruikerstijd”). Toon die in de rapportkop en houd hem consequent in tabellen, totalen en grafieken.
- Sla elk “moment in de tijd” op als UTC (
created_at,paid_at,message_sent_at). Sla de IANA-tijdzone-ID op wanneer context nodig is. - Bereken niet met vaste offsets zoals “UTC-5” als DST kan gelden. Converteer met de tijdzoneregels voor die datum.
- Label tijden duidelijk overal (UI, e-mails, exports). Voeg datum, tijd en tijdzone toe zodat screenshots en CSV’s niet verkeerd worden gelezen.
- Houd een kleine DST-testset: één tijdstempel net voor de voorjaarssprong, één net erna, en hetzelfde rond het herhaalde uur in de herfst.
Een realiteitscheck: als een supportmanager in New York “Tickets aangemaakt op zondag” exporteert en een collega in Londen het bestand opent, moeten beiden kunnen zien welke tijdzone de tijdstempels vertegenwoordigen zonder te moeten raden.
Voorbeeld: een echt supportworkflow over tijdzones heen
Een klant in New York opent een supportticket in de week dat de VS al op zomertijd is overgeschakeld, maar het VK nog niet. Je supportteam zit in Londen.
Op 12 maart stuurt de klant het ticket om 09:30 lokale tijd in New York. Dat moment is 13:30 UTC, omdat New York nu UTC-4 is. Een Londense agent antwoordt om 14:10 Londense tijd, wat die week 14:10 UTC is (Londen is nog UTC+0). Het antwoord kwam 40 minuten na de creatie van het ticket.
Zo breekt dit als je alleen lokale tijd opslaat zonder tijdzone-ID:
- Je slaat “09:30” en “14:10” op als platte tijdstempels.
- Een rapportjob neemt later aan dat “New York altijd UTC-5 is” (of gebruikt de servertijdzone).
- Het converteert 09:30 naar 14:30 UTC in plaats van 13:30 UTC.
- Je SLA-klok loopt een uur fout en een ticket dat binnen een 2-uur SLA viel kan als te laat worden gemarkeerd.
Het veiligere model houdt UI en rapportage consistent. Sla de gebeurtenistijd op als een UTC-tijdstempel en bewaar de relevante IANA-tijdzone-ID (bijv. America/New_York voor de klant, Europe/London voor de agent). In de UI toon je hetzelfde UTC-moment in de tijdzone van de kijker met de regels die voor die datum gelden.
Voor het weekrapport kies je een heldere regel zoals “groepeer op klant-lokale dag.” Bereken daggrenzen in America/New_York (middernacht tot middernacht), converteer die grenzen naar UTC en tel tickets binnen die grenzen. De cijfers blijven stabiel, ook tijdens DST-weken.
Volgende stappen: zorg dat tijdconsistentie door de hele app geldt
Als je product last heeft gehad van DST-fouten, is de snelste route naar verbetering het opschrijven van een paar regels en die overal toepassen. “Grotendeels consistent” is waar tijdproblemen wonen.
Houd de regels kort en specifiek:
- Opslagformaat: wat je opslaat (meestal een instant in UTC) en wat je nooit opslaat (ambigu lokale tijd zonder zone).
- Rapporttijdzone: welke zone rapporten standaard gebruiken en hoe gebruikers die kunnen wijzigen.
- UI-labels: wat naast tijden verschijnt (bijv. “10 mrt, 09:00 (America/New_York)” versus alleen “09:00”).
- Afrondregels: hoe je tijd buckets (uur, dag, week) maakt en welke zone die buckets volgen.
- Auditvelden: welke timestamps “gebeurtenis plaatsvond” betekenen versus “record aangemaakt/bijgewerkt”.
Rol het gefaseerd uit. Herstel eerst nieuwe records zodat het probleem niet verder groeit. Migreer vervolgens historische data per batch. Houd tijdens migratie zowel de originele waarde (als je die hebt) als de genormaliseerde waarde lang genoeg om verschillen in rapporten te ontdekken.
Als je AppMaster gebruikt (appmaster.io), is één praktisch voordeel het centraliseren van deze regels in je datamodel en gedeelde businesslogica: sla UTC-tijdstempels consequent op, bewaar IANA-tijdzone-IDs naast records die lokale betekenis nodig hebben, en pas conversies toe bij input- en weergavegrenzen.
Een praktische volgende stap is één tijdzone-veilige rapportage (bijv. “opgeloste tickets per dag”) te bouwen en die te valideren met de testcases hierboven. Als die correct blijft tijdens een DST-wisselweek voor twee verschillende tijdzones, zit je goed.
FAQ
Zomertijd verandert de lokale klokoffset, niet het daadwerkelijke moment waarop iets gebeurde. Als je een lokale kloklezing behandelt alsof het een absoluut tijdstip is, zie je in het voorjaar ‘ontbrekende’ tijden en in de herfst ‘gedupliceerde’ tijden.
Sla echte gebeurtenissen op als een absoluut moment in UTC, zodat de waarde niet verschuift als offsets veranderen. Converteer naar de lokale tijd van de kijker alleen bij weergave, en gebruik daarbij een echte tijdzone-ID.
Een offset zoals -05:00 beschrijft alleen het verschil met UTC op één moment en bevat geen DST-regels of geschiedenis. Een IANA-tijdzone zoals America/New_York bevat het volledige regelset zodat conversies voor verschillende datums correct blijven.
Sla datum-only waarden op als datums wanneer ze geen echte momenten zijn, zoals verjaardagen, factuurvervaldata en “vernieuwt op de 5e”. Als je ze als tijdstempel opslaat, kunnen tijdzoneconversies ze naar de dag ervoor of erna verplaatsen.
‘Voorjaar’ creëert lokale tijden die nooit bestaan, dus blokkeer ongeldige keuzes en bied de eerstvolgende geldige tijd aan. ‘Herfst’ creëert een herhaald uur, dus laat de gebruiker kiezen welke instantie hij bedoelt, bijvoorbeeld door de offset te tonen.
Voor planning: sla de bedoelde lokale datum en tijd plus de tijdzone-ID op, want dat is wat de gebruiker bedoelt. Je kunt ook een afgeleide UTC-instant bewaren voor uitvoering, maar gooi de oorspronkelijke lokale intentie niet weg want dan verlies je betekenis als regels veranderen.
Kies één rapporttijdzone per rapport en maak die zichtbaar, zodat iedereen weet wat “dag” betekent. Groeperen op lokale dag kan 23- of 25-uur dagen opleveren rond DST, wat acceptabel is zolang de gekozen zone duidelijk is en consequent wordt toegepast.
Converteer input eenmaal, sla eenmaal op en formatteer eenmaal voor weergave. Veelvoorkomende verschuivingen van één uur ontstaan wanneer een laag denkt dat een timestamp lokaal is en een andere laag denkt dat het UTC is — dat leidt tot dubbele conversie.
Sla verstreken tijd op in seconden (of een andere absolute maat) en tel die waarden op; formatteer het resultaat pas voor weergave. Bepaal vooraf of je bedoelt ‘verstreken tijd’ of ‘kloktijd’, want nachten met DST kunnen klokuren langer of korter doen lijken.
Test beide DST-overgangsdagen in minstens één zone die DST gebruikt en vergelijk met een niet-DST-zone om veronderstellingen te ontdekken. Neem gevallen op voor het ontbrekende uur, het herhaalde uur, evenementen rond middernacht en rapportgroepering — daar verbergen zich meestal fouten.


