“Het lijkt me meer een spookverhaal”, reageert Sije de Haan op de vraag of het spookuurprobleem bestaat. “Het lijkt niet de moeite waard daar een aparte website voor op te richten. Waar ik vandaan kom vallen dergelijke programmeerpraktijken onder de categorie beginnersfouten.”
Bestaat het spookuurprobleem of is het een marketingstunt, vraagt ‘Is het spookuur spookhandel?’ (Computable, 5 augustus 2005). Het spookuurprobleem speelt volgens sommige deskundigen bij programma’s die datum en tijd afzonderlijk ophalen. Daardoor zouden verwerkingsfouten kunnen ontstaan; de verwerking lijkt dan 24 uur eerder of later te zijn uitgevoerd dan hij is gedaan.
Datum en tijd moeten helemaal niet apart opgehaald worden. Het besturingssysteem en de programmeertaal (zouden) moeten voorzien in een gecombineerde functie voor het ophalen van datum en tijd. In Visual C++ bijvoorbeeld kun je de Windows-api-functie GetLocalTime gebruiken. Dan krijg je de datum en tijd tegelijk (overigens in honderdsten van seconden). Nu kun je zeggen dat Windows in die functie hetzelfde probleem heeft, maar dat is niet zo.
Zomertijd
Ten eerste is het een ‘atomair’ stukje software. Tijdens de uitvoering van de functie besteedt de cpu geen tijd aan andere taken in ‘multitasking’-omgevingen. Verder worden datum en tijd in de computer niet continu bijgewerkt, maar slechts een paar keer per seconde aan de hand van ‘clockticks’ die worden opgewekt door een ‘interrupt’. Genoemde functie stelt die onderbrekingen eventjes (een paar microseconden) uit, waardoor het probleem niet optreedt.
Als de gebruikte programmeertaal niet voorziet in het gecombineerd ophalen van datum en tijd is er een simpele oplossing: vraag eerst de tijd op, daarna de datum en daarna nog eens de tijd. Is de tweede tijd lager dan de eerste (bijvoorbeeld eerst 23:59:59 en daarna 00:00:01), dan is er een datumovergang geweest. Gebruik dan de tweede tijd en vraag nogmaals de datum op, omdat niet zeker is of de eerste datum bij de eerste of de tweede tijd hoort. Is de tweede tijd hoger dan de eerste, dan weet je zeker dat datum en tijd bij elkaar horen. Als je een trage computer hebt, kun je een en ander nog optimaliseren door de tweede tijd alleen maar op te vragen als het eerste tijdstip na bijvoorbeeld 23:59:00 ligt.
Overigens kunnen er twaalf uur ’s nachts wel meer dingen fout gaan. Ik heb ooit een stukje software gemaakt wat niet langer gebruikte tijdelijke bestanden na een dag verwijderde. Het programma crashte vaak om middernacht. Wat had ik fout gedaan? Ik keek naar de datum van de bestanden. Na een datumovergang probeerde het programma soms bestanden te verwijderen die nog maar een paar seconden oud waren en meestal nog in gebruik waren. Je moet dan dus naar de ouderdom in uren of minuten kijken en niet naar de datum.
Verder zijn er problemen met de zomer- en wintertijd. Bij het vastleggen van gebeurtenissen moet je in de uren van omschakeling weten of het zomer- of wintertijd is. Als je de klok in het najaar een uur terug zet, wordt het twee keer 03:00, de eerste keer in de zomertijd en de tweede keer in de wintertijd. Besturingssystemen die niet kunnen omgaan met zomer- en wintertijd hebben dus een probleem. Dat kan de applicatie overigens wel omzeilen.
Sije de Haan