Articles

Wat is het probleem met het jaar 2038?

Het millenniumprobleem wordt tegenwoordig door de meeste mensen begrepen vanwege de grote hoeveelheid aandacht die het in de media heeft gekregen.

De meeste programma’s die in de programmeertaal C zijn geschreven, zijn relatief immuun voor het millenniumprobleem, maar hebben in plaats daarvan last van het millenniumprobleem 2038. Dit probleem ontstaat doordat de meeste C-programma’s gebruik maken van een bibliotheek met routines die de standaardtijdbibliotheek wordt genoemd. Deze bibliotheek stelt een standaard 4-byte formaat vast voor de opslag van tijdwaarden, en biedt ook een aantal functies voor het omzetten, weergeven en berekenen van tijdwaarden.

Advertentie

Het standaard 4-byte formaat gaat ervan uit dat het begin van de tijd 1 januari 1970 is, om 12:00:00 a.m. Deze waarde is 0. Elke tijd/datum waarde wordt uitgedrukt als het aantal seconden volgend op die nulwaarde. Dus de waarde 919642718 is 919.642.718 seconden na 12:00:00 a.m. op 1 januari 1970, dat is zondag 21 februari 1999, om 16:18:38 Pacific tijd (V.S.). Dit is een handig formaat, want als je twee willekeurige waarden van elkaar aftrekt, krijg je een aantal seconden dat het tijdsverschil tussen die twee is. Dan kun je andere functies in de bibliotheek gebruiken om te bepalen hoeveel minuten/uren/dagen/maanden/jaren er tussen de twee tijdstippen zijn verstreken.

Als je hebt gelezen Hoe Bits en Bytes Werken, weet je dat een integer getal van 4 bytes een maximale waarde heeft van 2.147.483.647, en dit is waar het probleem met het jaar 2038 vandaan komt. De maximale waarde van de tijd voordat het omrolt naar een negatieve (en ongeldige) waarde is 2.147.483.647, wat zich vertaalt in 19 januari 2038. Op deze datum zullen alle C programma’s die gebruik maken van de standaard tijdbibliotheek problemen krijgen met datumberekeningen.

Dit probleem is gelukkig iets eenvoudiger op te lossen dan het Y2K probleem op mainframes. Goed geschreven programma’s kunnen gewoon opnieuw worden gecompileerd met een nieuwe versie van de bibliotheek die bijvoorbeeld 8-byte waarden gebruikt voor het opslagformaat. Dit is mogelijk omdat de bibliotheek de hele tijdactiviteit inkapselt met zijn eigen tijdtypes en functies (in tegenstelling tot de meeste mainframe programma’s, die hun datumformaten of berekeningen niet standaardiseerden). Het probleem van het jaar 2038 zou dus lang niet zo moeilijk op te lossen moeten zijn als het Y2K-probleem was.

Hier zijn enkele interessante links:

Advertentie

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *