Unix-Zeit und die ISO-8601-Schreibweise
Einheit außerhalb des SI · Größe: ein Zeitpunkt als ganze Zahl von Sekunden seit 1970
Am neunzehnten Januar 2038 wird um drei Uhr vierzehn Minuten und sieben Sekunden Weltzeit ein zweiunddreißig Bit breiter Sekundenzähler den Wert 2 147 483 647 erreichen — die größte Zahl, die er zu fassen vermag. Der nächste Takt hebt das oberste Bit, und dasselbe Binärwort wird fortan als negativ gelesen: Uhren, die die Zeit nach eben dieser Zählung führen, finden sich nicht im Jahr 2038 wieder, sondern im Dezember 1901. Eine Kuriosität ferner Zukunft ist das nicht — eine Industriesteuerung oder ein Wasserzähler dient länger als die zwölf Jahre, die bleiben.
Die Zählung ist denkbar einfach gebaut: die Sekunden laufen fortlaufend von Mitternacht des ersten Januar 1970, und ein Tag enthält in ihr stets genau 86 400 Sekunden. Eben diese Einfachheit ist die Quelle beider Eigenheiten. Einerseits ergibt sich aus der Zahl augenblicklich ein Kalenderdatum und umgekehrt, sodass jedes Ereignisprotokoll, jede Datenbank und jedes Dateisystem die Zeit gerade damit führt. Andererseits lässt sich eine Schaltsekunde in einer solchen Zählung überhaupt nicht ausdrücken, was heißt, dass sie ihrem Namen zum Trotz nicht Sekunden nummeriert, sondern Tage mit Bruchteilen, und in Wahrheit eine lineare Funktion der UTC-Schreibweise ist und kein Zähler verstrichener Zeit.
01 · Definition
Die Unix-Zeit ist die Zahl der Sekunden, die seit Mitternacht des ersten Januar 1970 koordinierter Weltzeit vergangen sind, unter der Annahme, dass jeder Tag genau 86 400 Sekunden hält. Die ISO-8601-Schreibweise sagt dasselbe anders: mit Kalenderdatum, Tageszeit und der Angabe der Abweichung vom Nullmeridian, wobei die Felder streng vom Groben zum Feinen laufen.
Der Vorbehalt der 86 400 Sekunden ist keine Kleinigkeit, sondern das Wesentlichste an der Definition. Eine vom Erdrotationsdienst angekündigte Schaltsekunde kann die Zählung nicht aufnehmen, und deshalb wiederholt das System im Augenblick der Einfügung entweder ein und denselben Wert zweimal oder stellt die Uhr zurück. Daraus folgt Wichtiges: die Differenz zweier unix-Zahlen ist nicht die Zahl der Sekunden, die zwischen zwei Ereignissen tatsächlich vergangen sind, wenn dazwischen eine Schaltsekunde lag — die Abweichung von der Atomzeitskala ist bereits auf siebenundzwanzig Sekunden angewachsen.
Die Grenze dagegen hängt nicht von der Definition ab, sondern von der Breite der Speicherung. Zweiunddreißig Bit mit Vorzeichen ergeben den größten Wert 2 147 483 647, der auf den neunzehnten Januar 2038 fällt; der nächste Zuwachs setzt das oberste Bit auf eins und macht die Zahl negativ, womit die Uhr auf den dreizehnten Dezember 1901 zurückgeworfen wird. Vierundsechzig Bit schieben die Grenze zweihundertzweiundneunzig Milliarden Jahre nach vorn, doch ganze Nanosekunden gehen in denselben vierundsechzig Bit schon 2262 zu Ende.
Die Schreibweise nach der Norm löst eine andere Aufgabe — nicht Speicherung, sondern Austausch — und deshalb zählen in ihr Dinge, die die Zahl gar nicht hat: die Zeitzonenangabe, das Trennzeichen zwischen Datum und Zeit und die Regel, dass bei gleicher Zeichenlänge die lexikografische Ordnung mit der zeitlichen zusammenfällt. Gerade diese letzte Eigenschaft hat das Format zur Grundlage der Sortierung in Dateinamen und Protokollen gemacht.
Führen Sie die Zeit mit dem Schieberegler und sehen Sie zu, wie sich das Register füllt: die Bits leuchten von rechts nach links auf, und solange das oberste, das Vorzeichenbit, dunkel bleibt, ist die Zahl positiv und das Datum wächst. Sobald der Zähler über 2 147 483 647 hinaustritt, flammt das oberste Bit rot auf, die ganze Zahl wird negativ, und die Uhr springt ins Jahr 1901.
Die grüne Gerade ist die Atomzeitskala, auf der jede Sekunde wirklich eine Sekunde ist. Die rote Treppenlinie ist die Unix-Zeit, die bei jeder Einfügung ein und denselben Zeitstempel zweimal ausgibt, weshalb die Linie auf der Stelle verharrt. Die Abweichung beträgt bereits siebenundzwanzig Sekunden und wächst, und darum taugt die Zählung für ein Kalenderdatum, nicht aber zum Messen von Dauern in der Physik.
02 · Umrechnung
Zeitstempel oder Datum eingeben
Zwischen allen Vielfachen der Zählung — Sekunden, Millisekunden, Mikro- und Nanosekunden — sind die Umrechnungen genau, da sie sich nur um einen Faktor unterscheiden. Ungefähr ist eine einzige Zeile: die Umrechnung auf die Atomzeitskala verlangt zu wissen, wie viele Schaltsekunden bis zum gegebenen Zeitpunkt aufgelaufen sind.
Die Zerlegung einer Normzeichenfolge nimmt das Blatt in der erweiterten Schreibweise mit dem Buchstaben Z vor; die Basisform ohne Trennzeichen liegt in den Feineinstellungen.
Das Jahr-2038-Problem liegt nicht in der Norm, sondern in der Hardware und im alten Code: zweiunddreißig Bit breite Zeitstempel sitzen in der Firmware von Zählern, in Industriesteuerungen, in Dateisystemformaten und in Datenbanken, wo das Feld bereits mit vier Byte erklärt ist. Den Typ in den Quellen zu ändern ist leicht genug; Millionen installierter Geräte in den verbleibenden zwölf Jahren durchzugehen ist eine Aufgabe derselben Art wie jene vor dem Jahr 2000.
| Wert | Anmerkung | ||
|---|---|---|---|
| {u} | {name} | {value} | {note} |
03 · Größenordnungen
logarithmische Skala: von einer Sekunde bis zur Grenze von vierundsechzig Bit04 · Messgeräte
Womit ein Ereignis gestempelt wird
Ein eigener Chip mit Batterie, der die Zählung führt, solange das Gerät ausgeschaltet ist. Er speichert für gewöhnlich keinen Unix-Zeitstempel, sondern die Kalenderfelder einzeln, und die Breite seines Jahresfeldes ist seine eigene, sodass bei alten Platinen das Gespräch über 2038 mit der Frage beginnt, bis zu welchem Jahr der Chip selbst zählt.
Das NTP-Protokoll bringt die Uhr einer Maschine auf wenige Millisekunden genau auf die gemeinsame Zeit, und es warnt auch mit einem eigenen Kennzeichen einen Tag im Voraus vor einer Einfügung. Eine eigene Grenze hat es ebenfalls, und die kommt früher: gezählt wird ab 1900 in vorzeichenlosen zweiunddreißig Bit, und der Überlauf fällt in den Februar 2036.
In ein Protokoll wird der Zeitstempel entweder als Zahl oder als Zeichenfolge nach der Norm geschrieben, und das zweite ist aus genau einem Grund vorzuziehen: bei Zeichenfolgen gleicher Länge fällt die alphabetische Ordnung mit der zeitlichen zusammen, sodass die Einträge ohne Zerlegung des Datums sortieren. Ebendarum hat sich das Format weit über die Rechentechnik hinaus verbreitet.
Die Bereitschaft eines Geräts für 2038 lässt sich auf einzige Weise prüfen — die Uhr darauf über die verhängnisvolle Grenze stellen und sehen, was aus Protokollen, Zertifikaten und der Intervallrechnung wird. So hat man bereits Ausfälle in der Abrechnung, in Zutrittssystemen und in Schlüssellaufzeiten gefunden, wo ein Datum in der Zukunft durch Addition entsteht und lange vor der Grenze selbst überläuft.
05 · Schreibregeln
Vom Groben zum Feinen, und stets mit Zeitzonenangabe
Die Norm verlangt absteigende Reihenfolge der Felder, vier Ziffern des Jahres, den Bindestrich als Datumstrennzeichen und den Buchstaben T vor der Zeit; die Zeitzonenangabe steht entweder als Buchstabe Z für den Nullmeridian oder als plus-minus Stunden und Minuten. Ein Unix-Zeitstempel wird als ganze Zahl ohne Ziffergruppierung geschrieben, und das Vielfache ist stets anzugeben, da ein Faktor von tausend Sekunden von Millisekunden trennt und beide der Größe der Zahl nach leicht zu verwechseln sind.
Die erste Schreibweise wird in verschiedenen Ländern verschieden gelesen und ist deshalb im Datenaustausch unzulässig. Die zweite lässt sowohl das Trennzeichen als auch die Zeitzonenangabe weg, sodass der Zeitpunkt um einen Tag nach beiden Seiten unbestimmt bleibt. Die dritte verliert die führenden Nullen, weshalb die Zeichenfolgen nicht mehr alphabetisch sortieren — und gerade für diese Eigenschaft wird das Format geschätzt. Die vierte setzt die Unix-Zählung mit der Atomzeitskala gleich, während zwischen ihnen siebenundzwanzig Sekunden aufgelaufener Schaltsekunden liegen.
06 · Benachbarte Einheiten
Daneben stehen alle Zählungen, die nach demselben Grundsatz gebaut sind, nur von einem anderen Anfang: die NTP-Zeit ab 1900, das Julianische Datum ab Mittag des Jahres 4713 vor unserer Zeitrechnung, die Skala des Satellitensystems ab Januar 1980. Sie unterscheiden sich allein in Epoche und Einheit und werden deshalb durch Abziehen einer Konstante umgerechnet.
vorzeichenbehaftete Sekunden
seine Grenze fällt schon 2036
Schaltsekunden ehrlich mitgezählt
Von den Datenblättern von Simetrium stehen daneben das Julianische Datum, von dem die Umrechnungskonstante stammt, die Skalen UTC, TAI und UT1, die die fehlenden Schaltsekunden erklären, Sekunde als Einheit der Zählung, und das Bit, dessen Breite die Grenze festlegt.
07 · Historischer Teil
Eine Epoche, gewählt aus Bitmangel
Im ersten Unix-Handbuch wurde die Zeit in Sechzigsteln einer Sekunde ab Anfang 1971 gezählt, und in zweiunddreißig Bit fasste eine solche Zählung nur gut zwei Jahre. Sie gingen so rasch zu Ende, dass die Epoche bei jeder Ausgabe des Systems hätte verschoben werden müssen, und man gab die Bruchteile der Sekunde zugunsten ganzer auf.
Mit dem Übergang zu ganzen Sekunden gewannen die Entwickler einen Vorrat von hundertsechsunddreißig Jahren und konnten den Anfang nach Bequemlichkeit wählen statt aus Not. Man nahm den ersten Januar 1970 — das nächste runde Datum in der Vergangenheit, bis zu dem Maschinenaufzeichnungen ohnehin nicht reichten — und hat es seither kein einziges Mal geändert, obwohl das System mehr als einmal von Grund auf neu geschrieben wurde.
Die Internationale Organisation für Normung führte die auseinanderlaufenden nationalen Formate zu einem zusammen und legte ihm eine einfache Regel zugrunde: die Felder laufen vom Groben zum Feinen, alle mit führenden Nullen. Die Nebenwirkung erwies sich als wichtiger als die Absicht — solche Zeichenfolgen sortieren wie Zahlen, und das Format verbreitete sich in Dateinamen, Protokolle und Austauschverfahren.
Arbeitsplatz- und Serversysteme sind längst auf vierundsechzig Bit übergegangen, und dort ist die Grenze über jeden vernünftigen Horizont hinausgeschoben. Die Gefahr ist anderswo geblieben: in der Firmware von Geräten mit zwanzigjähriger Lebensdauer, in Dateiformaten, wo das Feld mit vier Byte erklärt ist, und in Berechnungen künftiger Fristen, die schon heute überlaufen, sobald man zum jetzigen Datum fünfzehn Jahre hinzuzählt.
Eine Zählung, die ihrem Namen zum Trotz keine Sekunden zählt
Die Definition der Unix-Zeit klingt nach einer Zählung von Sekunden, doch die Forderung nach glatten 86 400 Sekunden am Tag macht sie zu etwas anderem: zu einer linearen Funktion der UTC-Schreibweise und nicht zu einem Maß verstrichener Zeit. Jedes Mal, wenn der Erdrotationsdienst eine Einfügung ankündigt, muss die Zählung ein und denselben Wert zweimal wiederholen oder zurückspringen, und der Differenz zweier Zeitstempel geht eben diese Sekunde verloren. In einem halben Jahrhundert sind siebenundzwanzig solcher Verluste zusammengekommen, und darum nimmt man bei Aufgaben, die eine echte Dauer brauchen, die Atomzeitskala und nicht diese.
Die zweite Eigenheit liegt überhaupt nicht in der Definition, sondern in der Art der Speicherung, und das macht sie zur einzigen Grenze in unserem Katalog, die weder von der Natur noch durch Vereinbarung gesetzt ist, sondern durch die Breite eines Maschinenworts. Das Julianische Datum endet nie, weil es eine Zahl ist; die Unix-Zeit endet am neunzehnten Januar 2038, weil sie ein Feld von vier Byte ist. Der Unterschied zwischen einer Größe und ihrer Darstellung beschäftigt Metrologen für gewöhnlich wenig, und hier entscheidet gerade er alles.
Katalog · Maßeinheiten
Ein Datenblatt für jede Größe
Sieben SI-Basiseinheiten, zweiundzwanzig abgeleitete mit eigenem Namen und Größen außerhalb des Systems, ohne die weder Technik noch Kalender auskommen.