Zeitstempel

Zeitstempel (Timestamps) in der Informatik

Zielgruppe sind sowohl einfache IT-AnwenderInnen als auch StudentInnen und ambitionierte Informatik-Amateure

Grundkenntnisse der Informatik werden vorausgesetzt.



Zeitstempel


Reale Zeitmessung

Das Leben auf der Erde orientiert sich an den periodisch auftretenden Ereignissen: Tage, Jahreszeiten.

Die Länge eines Jahres ist kein ganzzahliges Vielfaches von Tagen. Die Beschreibung dieser komplizierten Realität war eine wichtige Aufgabe antiker Priester und Astronomen. Ein → Kalender ist ein Regel-Werk, mit dem man die realen Jahreszeiten berechnen und vorhersagen kann.

Man muss jeden Zeitpunkt zwischen der realen (astronomisch bestimmten) Welt und der idealen Zeitmessung mit Zeitstempeln umrechnen: Jedes einschlägige Programm muss dazu einen Kalender verwenden.

Die praktische Informatik setzt Grenzen für Timestamps: Mit dem Daten-Typ muss man die Anzahl und Anordnung der für einen Zeitstempel verwendeten Bits festlegen. Daraus ergeben sich zwangsläufig die Enden der Skala (minimales und maximales Datum) und die Auflösung (kleinste unterscheidbare Zeit-Differenz).

Wenn man mit historischen Daten arbeitet, trifft man auf ein weiteres Problem:
Der verwendete → Kalender wurde je nach Nation zu unterschiedlichen Zeitpunkten geändert. Daher muss man bei der Umrechnung zwischen idealen Zeitstempeln und realen historischen Daten je nach Nation und Datum andere Regeln anwenden.



  Ein ↓ Julianisches Datum (JD) zählt die Tage seit
4712‑01‑01 12:00:00
Dieses System wurde schon im Jahre 1583 (!) entwickelt und wird bis heute für astronomische und historische Zwecke verwendet.
Das JD-System ist besonders für lange Zeiträume praktisch.


Beispiel
Ein Dateisystem muss Transaktionen (z.B. Datei lesen, schreiben) mit winzigen Zeit-Intervallen voneinander unterscheiden können. Das auf Linux oft verwendete ext4-Dateisystem verwendet Zeitstempel mit dem Nullpunkt 1901-12-14 und einer Schrittweite von 1ns = 1E-9s
ext4 verwendet dazu Ganze Zahlen von 64 Bit Breite: Damit kann man bis zum Jahr 2514 pro Sekunde 1 Milliarde verschiedener Zeitpunkte unterscheiden.

UNIX-Timestamp (UTS)



Der aktuelle UNIX-Timestamp ist weltweit eindeutig:
UTS = *



Negative Zahlenwerte für die Jahre 1901...1969 sind möglich, werden jedoch nur selten verwendet.

Die Auflösung (kleinste unterscheidbare Zeit-Differenz) beträgt 1 Sekunde. Das ist für manche Anwendungen zu grob:
Man kann das UTS-System durch andere Zeitstempel mit hoher Auflösung und kurzer Reichweite ergänzen, oder:

Javascript verwendet UNIX-ähnliche Zeitstempel mit dem gleichen Nullpunkt, jedoch Schritten in Millisekunden (ms) und speichert sie mit 64 Bit (8 Byte).

Manche Programme verwenden Gleitkomma-Zahlen (64 Bit) und geben die Millisekunden als Nachkomma-Anteil an.



Die Umrechnung zwischen der Weltzeit UTC und den lokalen Kalender-Regeln ist Aufgabe der lokal installierten Software. Das ist sinnvoll, weil Betriebssysteme und Programme die lokalen Regeln am besten kennen sollten.



Eine wichtige Ausnahme sind Büro-(Office)-Programme, die den von MS bevorzugten ↓ Y1900-Zeitstempel verwenden.


 

Y1900 Zeitstempel



Der aktuelle Y1900 Zeitstempel in Mitteleuropäischer Zeit (CET, MEZ):
Y1900 = *



Das Y1900-System reicht mit einer Genauigkeit von 1ms bis zum Jahr 29000. MS-Excel setzt eine obere Grenze mit dem Datum 9999‑12‑31
Sie wurde vermutlich willkürlich festgesetzt, weil sich dafür keine logischen Argumente finden.

Negative Zahlenwerte für Jahre < 1900 sind bei LibreOffice und OpenOffice möglich, nicht jedoch bei MS-Excel.



Leider bieten die wichtigen Büro-(Office)-Programme derzeit keine Funktionen zur Umrechnung von Zeit-Daten in andere Zeitzonen, insbesondere in die Weltzeit UTC.
Auf einer eigenen Seite wird zu diesem Zweck ein → Basic-Modul vorgestellt, welches man mit allen Büro-Programmen verwenden kann.

Bei Weitergabe von Y1900-Daten, insbesondere von Büro-Dokumenten (Textverarbeitung, Tabellen-Kalkulation) mit heiklen Zeit-Angaben kann es vorkommen, dass die Daten an einem anderen PC unterschiedlich interpretiert werden.



Die Zahl 0 wird (nur) von MS-Excel fälschlich als 1900‑01‑00 angezeigt, wenn man sie als Datum formatiert. Negative Zahlen ergeben (nur) mit MS-Excel Fehler-Werte.

Es ist interessant, dass man den falschen Kalender beibehielt, um die wenigen damals vorhandenen Daten zu schützen, umgekehrt jedoch die Erzeugung von sehr viel mehr neuen 'fehlerhaften' Daten in Kauf nahm.

Y1900-Fehler bei Wikipedia und MS



Auch die kostenfreien Büro-Programm-Pakete LibreOffice und OpenOffice verwenden das Y1900-System. Das ist sinnvoll, damit die damit erzeugten Dateien mit MS-Office kompatibel sind.

Details zur → Programmierung von Datum & Zeit in Tabellen-Kalkulation und zu → BASIC-Hilfsprogrammen für die Zeitzonen-Rechnung

Julianisches Datum



Der aktuelle JD Zeitstempel ist weltweit eindeutig:
JD = *



Beachten sie, dass der Datum-Wechsel nicht um Mitternacht erfolgt sondern zu Mittag um 12:00:00 Weltzeit UTC.
Negative Werte sind nicht zulässig, weil die gängigen Algorithmen damit fehlerhaft rechnen.



Das Julianische Datum kann allerdings einen größeren Bereich beschreiben als die meisten anderen Zeitstempel.
Man kann daher die unten angegebenen ↓ Umrechnungs-Formeln nur für jene Bereiche anwenden, in denen beide Zeitstempel definiert sind.

Zur Anwendung auf sehr große Bereiche verwendet man Funktionen, welche das JD direkt aus den Elementen (Jahr, Monat, Tag, Stunde, Minute, Sekunde) berechnen, bzw. ein JD in diese Elemente aufspalten.



Daher sind alle in diesem System codierten Daten global eindeutig, portabel und ohne Umrechnung direkt vergleichbar.



Das JD-System wurde 1583 von Joseph Justus Scaliger entwickelt. Der Name ('Julianisch') hat allerdings nichts mit Julius Cäsar zu tun.

In diesem Web wird ein ↗ Basic-Modul mit JD-Funktionen zur Verwendung mit Tabellen-Kalkulation angeboten (Details).
Zur Berechnung der Daten dieser Webseite wird ein ↗ Javascript-Modul verwendet, welches u.a. auch alle erwähnten JD-Funktionen enthält.



Der Nullpunkt der MJD-Skala liegt damit am 1858‑11‑17
Mit 5stelligen ganzen Zahlen 00000 .. 99999 beschreibt MJD den Datum-Bereich 1858‑11‑17 .. 2132‑08‑31

Der aktuelle MJD Datum-Stempel ist weltweit eindeutig:
MJD = ?


In den USA wird der Begriff 'Julian Date' im wissenschaftlichen Bereich gleich interpretiert wie sonst weltweit. Im kommerziellen Bereich meint man damit oft irreführend das → Daten-Format YYYYDDD

ANSI-Datum



Das aktuelle ANSI-Datum:
ANSIDate = *


Der Nullpunkt der ANSI-Skala wurde kurz nach Einführung des Gregorianischen Kalenders am 1582‑10‑15 gewählt.
In manchen Staaten wurde dieser Kalender allerdings erst später eingeführt (USA 1752), daher kann es bei Daten der Jahre 1582-1752 Differenzen von einigen Tagen geben.

Umrechnung von Zeitstempeln


Die Variable tzoh bezeichnet die jeweilige (!) Differenz der lokalen Zeit plus → Sommerzeit zur Weltzeit UTC. Sie ist vom Datum und an den Umstellungs-Tagen auch von der Zeit abhängig.
Derzeit (!) ist in Mitteleuropa
tzoh = 1

 UTSY1900JD ANSIDate
UTS
uts = uts
uts = (y1900 - tzoh/24 - 25569) * 86400 uts = (jd - 2440587.5) * 86400 uts = (ansi - 134775) * 86400
 Y1900  y1900 = uts/86400 + 25569 + tzoh/24
y1900 = y1900
y1900 = jd - 2415018.5 + tzoh/24 y1900 = ansi + tzoh/24 - 109206
JD jd = uts/86400 + 2440587.5 jd = y1900 - tzoh/24 + 2415018.5
jd = jd
jd = ansi + 2305812.5
ANSI ansi = uts / 86400 + 134775 ansi = y1900 - tzoh/24 + 109206 ansi = jd − 2305812.5
ansi = ansi

Mars ♂ Sol-Datum



Das aktuelle Mars-Sol-Datum:
MarsSol = *


Umrechnung:
marssol = (uts / 86400 + 35065.5) / 1.02749
marssol = (y1900 - tzoh/24 + 9496.5) / 1.02749
marssol = (jd - 2405522) / 1.02749
uts = (marssol * 1.02749 - 35065.5) * 86400
y1900 = marssol * 1.02749 - 9496.5 + tzoh/24
jd = marssol * 1.02749 + 2405522