Die Woche: Unstete Zeiten

Schaltsekunden, Schalttage und Ausnahmen bei den Schaltjahren scheinen einige Programmierer zu überfordern: Immer wieder stolpern sie über die korrekte Zeitbestimmung, weil sie wohl definierte Sonderfälle nicht beachten oder schlicht nicht weit genug in die Zukunft sehen.

In Pocket speichern vorlesen Druckansicht 44 Kommentare lesen
Lesezeit: 4 Min.

Wie war das nochmal mit den Schaltjahren? Alle vier Jahre gibt es den 29. Februar, das ist leicht programmiert. Wenn da nur nicht die ganzen Ausnahmen zu den Jahrhundertwenden wären. Man sollte daher besser weit in die Zukunft schauen, wenn es darum geht, eine Datums- oder Kalenderfunktion zu implementieren – sonst übersieht man leicht die Sonderfälle. Und von denen gibt es mehr, als vielen bewusst ist.

Auch bei den Sekunden kann man leicht ins Stolpern kommen. Wie viele davon hat noch gleich die Minute? Bis zu 61 lautet die korrekte Antwort, wenn Sie einen C-Programmierer fragen (struct tm). Was unsinnig klingt, hat durchaus seinen praktischen Nutzen – schließlich mussten schon mehrfach Schaltsekunden eingefügt werden, um die ständig sinkende Rotationsgeschwindigkeit der Erde auszugleichen. Gemäß ANSI-Standard hat einfach eine Minute maximal 61 Sekunden, schon ist die Schaltsekunde eingearbeitet.

Würden alle Programmierer die Standards konsequent einhalten, gäbe es solche Schaltsekundenprobleme wie 2009 oder zuletzt Anfang Juli wohl nicht, wo die Schaltsekunde etliche Linux-Rechner aus dem Tritt brachte oder Anwendungen abstürzen ließ.

Jetzt hämisch grinsend mit dem Finger auf die Linux-Programmierer zu zeigen, wäre allerdings unfair. Auch Microsoft, Apple und viele andere Softwareschmieden hatten und haben ihre liebe Not mit der Zeit.

So kamen diverse iPhone-Besitzer schon mehrfach zu spät zur Arbeit, weil es Apple wiederholt misslang, die Sommerzeitumstellung oder auch nur den Jahreswechsel bei der Weckfunktion zu berücksichtigen. Sony sperrte Anfang März 2010 PlayStation-3-Besitzer vom PlayStation Network aus, weil sich die Spielekonsole nicht zwischen dem 29. Februar und dem 1. März 2010 entscheiden konnte – und sich kurzerhand ins Jahr 1999 zurück beamte.

Microsofts jünstes Schaltjahr-Debakel ereignet sich beim Musik-Player Zune Anfang 2009: Weil der Player bei der Zählung der Tage für das laufende Jahr 2008 den Schalttag vergaß, wähnte er sich bereits an Silvester 2008 im neuen Jahr und stellte den Betrieb komplett ein. Die Besitzer mussten Silvester 2008 ohne Zune begehen, erst im neuen Jahr erwachte das Gerät wieder zum Leben.

Die Beispiele iPhone, PlayStation 3 und Zune zeigen, dass der Anwender auf die Hilfe des Herstellers angewiesen ist, wenn es sich um Consumer-Geräte, Embedded-Systeme oder Appliances handelt, deren Betriebssysteme für den Anwender nicht zugänglich sind. Bei älteren Geräten stellen sich dann die Fragen: Unterstützt der Hersteller das Gerät noch? Und gibt es den Hersteller überhaupt noch?

Für Linux-Rechner, aber auch für Embedded-Systeme und Appliances, die mit Linux arbeiten, wird der 19. Januar 2038 zur Nagelprobe: Am frühen Morgen kommt es zu einem Überlauf der Unix-Zeit, die im Unix- und Posix-Standard als 32 Bit großer, vorzeichenbehafteter Integer-Wert definiert ist. Als Nullzeit wurde der 1. Januar 1970 festgelegt. Das Vorzeichen ist nötig, um auch mit Datumsangaben vor 1970 rechnen zu können. Allerdings stehen dadurch nur noch 31 Bit, also 2147483647 Sekunden, zur Verfügung – die Unix-Zeit reicht also gerade einmal 68 Jahre in die Zukunft und in die Vergangenheit, von Ende 1901 bis Anfang 2038.

Auf 32-Bit-Systemen hat diese Grenze bis zum heutigen Tag Bestand, sie findet sich unter anderem in den Inode-Einträgen der Dateisysteme Ext2 und Ext3. Einige aktuelle Linux-Appliances wie Photovoltaik-Überwachungsanlagen oder Embedded-Systeme in Autos dürften das Jahr 2038 durchaus noch erleben – und dann ihren Betrieb einstellen, weil die Datumsfunktion ungültige Werte liefert. Anwendern bleibt nur die Hoffnung, rechtzeitig ein Update zu bekommen oder auf ein 64-Bit-System umzusteigen, dessen Zeitvariable so groß ist, dass sie bis zum Ende des Universums reicht. (mid) (mid)