Het jaar is inmiddels bijna een week oud, maar het bericht van Cloudflare van Nieuwjaarsdag is ook nu nog de moeite waard.
Waar gaat het om? Om één enkele seconde. Meer specifiek een schrikkelseconde die op middernacht van 31 december 2016 op 1 januari 2017 bij onze tijd geteld werd. Ik lag er niet wakker van, wist het eigenlijk nog niet eens. Totdat ik via Facebook, met dank aan Ton Zijlstra, het Cloudflare bericht voorbij zag komen. Het resultaat betekende dat ik heel wat langer dan 1 seconde bezig was met het doorlezen van dat bericht en vervolgberichten. 🙂
Tijd was ooit redelijk relatief. D.w.z. elke plaats in Nederland had een net iets afwijkende tijd. Met de komst van de trein ontstond er behoefte aan een universele tijd en sinds begin van de 20e eeuw hebben we de GMT en UTC. En toen werd het allemaal een stukje ingewikkelder.
Een belangrijke component voor het vaststellen van de UTC (Coordinated Universal Time) is de tijd zoals bijgehouden door een van de ongeveer 400 atoomklokken die wereldwijd opgesteld staan. Deze atoomklokken maken gebruik van de trillingen van het Cesium-133 atoom. Om precies te zijn: 1 seconde staat gelijk aan de tijd waarin een Cesium-133 atoom precies 9.192.631.770 keer trilt.
Die atoomklokken zijn heel nauwkeurig, ze hebben een afwijking van 1 seconde per 100 miljoen jaar (andere bronnen hebben het over 5 miljard jaar, is ook lang).
Prima zou je zeggen, dan gebruiken we voortaan die tijd, hebben we nergens meer last van. Het vervelende is echter dat de aarde zich niet aan die regelmaat houdt. Die draait namelijk steeds een klein beetje langzamer. Nee, hij staat niet over een jaar al stil, maar het verschil is wel meetbaar als je de tijd van 1 omwenteling = 1 dag = 24 uur = 86 400 seconden stelt. De “universal time” (of UT1), de tijd van 1 dag op aarde en de UTC (gebaseerd op de atoomtijd of TAI worden constant met elkaar vergeleken. Zodra het verschil groter dan 0,9 seconde dreigt te worden (dus dat de UT1 bijna 1 seconde achter loopt op de UTC), dan wordt er 1 schikkelseconde toegevoegd aan de UTC. Toegevoegd, dus eigenlijk wordt de UTC even een seconde tegengehouden zodat de UT1 hem weer een beetje bij kan halen.
En in die schrikkelseconde zit een klein probleem. De standaard manier telt van 23:59:59 door naar 23:59:60 en daarna pas naar 00:00:00. Maar blijkbaar is voor een aantal programmeertalen het gevolg dat het lijkt alsof de tijd een seconde achteruit gaat. En dat is vervelend als je systeem er vanuit gaat dat zoiets nooit gebeurt en de zaak in de soep loopt als het wel zo is. Het grappige is dat in het geval van Cloudflare, de programmeur wél controleerde of het verschil gelijk was aan 0 (“== 0”), maar niet kleiner dan 0 (“<= 0"), slechts 1 karakter verschil dus. Tijd en programmeurs zijn al veel langer zaken die niet altijd even vlekkeloos verlopen. De Y2K-bug was een heel bekende, maar ja, die kwam niet zo heel vaak voor, schikkelseconden wel vaker, al is nog niet bekend wanneer weer de volgende is. En anders dan de Y2K-bug is deze normaal gesproken na een seconde ook weer voorbij. Tenzij je kritische systemen hebt die net op dat moment over de rooie gaan. 🙂