6 augustus 2007

2038 is het nieuwe 2000

Een paar weken geleden zat ik met enkele collega's/vrienden te praten over unix timestamps. Voor de mensen die niet weten wat dit is:

unix timestamp
een cijfer dat aangeeft hoeveel seconden er al gepasseerd zijn sinds het unix epoch (1 jan 1970, middernacht).

In veel programmeertalen is dit opgeslagen in een 32bits signed integer, het grootst mogelijk getal is dus 2 147 483 647 (19 jan 2038 03:14:07). Na dit moment zullen er dus heel wat programma's/websites foute data teruggeven.

Tijdens de discussie kwamen we tot een "quickfix", namelijk we maken er een unsigned integer van. In dat geval kunnen we doorgaan tot 7 feb 2106 6:28:15. MAAR dit kan en zal nooit werken, want in veel applicaties gebruikt men timestamps om het verschil tussen twee datums op te slaan, dus we moeten wel één bit reserveren om aan te duiden of het op een positief of negatief getal gaat.

Hoogst waarschijnlijk zal tegen dan iedereen wel een 64bit CPU/OS combinatie hebben, en zullen timestamps dan wel opgeslagen worden in 64bits signed integers, maar wat met alle apparaten met een embeded CPU ofzo?

Als je interrese hebt, lees zeker volgende websites:

  1. http://en.wikipedia.org/wiki/Year_2038_problem
  2. http://home.netcom.com/~rogermw/Y2038.html
  3. http://www.2038bug.com/
  4. http://www.deepsky.com/~merovech/2038.html

Dit artikel gaat over: , , , , , , , , . 2038 is het nieuwe 2000 werd geschreven door Tijs.
Er zijn al 4 reacties.

Reacties

Jan

Jan schreef:
06/08/07

MAAR dit kan en zal nooit werken, want in veel applicaties gebruikt men timestamps om het verschil tussen twee datums op te slaan, dus we moeten wel één bit reserveren om aan te duiden of het op een positief of negatief getal gaat.

Daar ben ik het niet mee eens. Je kan 2 unsigned ints perfect van mekaar aftrekken. Wat wel waar is is dat je extra logica zal moeten inbouwen, die ervoor zorgt dat altijd het kleinste getal van het grootste wordt afgetrokken, anders kan je inderdaad vreemde resultaten krijgen.

tijs

tijs schreef:
06/08/07

Maar dan nog verschuiven het "maar" naar 2106 ;)

Serge van Ginderachter

Serge van Ginderachter schreef:
06/08/07

En voor wie het effect ervan eens wil getest zien:
####################
#!/usr/bin/perl
use POSIX;
$ENV{'TZ'} = "GMT";
for ($clock = 2147483641; $clock

Tom Klaasen

Tom Klaasen schreef:
28/08/07

Als ik mij niet vergis, loopt de timestamp van de (oudere versie van de) Mac op nog een andere datum over.
Software developers zorgen wel dat er werk blijft ;)

Reageer velden gemarkeerd met een sterretje zijn verplicht

*