Exakte Zeitmessung und Ewiger Kalender
Julianische Tage
Ein Kalender ordnet einem Datum einen Wochentag zu. Die Technik der Zeitmessung durch Zählung von Tagen ab einem Stichdatum kann auf eine ehrwürdige Tradition zurückblicken. Sie leistet auch auf dem Computer immer noch gute Dienste.
Während auf den Computern die geometrische Dimension des Raumes in vielfältigen Graphikanwendungen ausführlich behandelt wird (jedes Textverarbeitungsprogramm offeriert heute Massangaben in Zentimetern, Zoll, "Picas" ...), führt die Zeitdimension ein Schattendasein. Da sich die Frage der korrekten Erfassung von Kalenderdaten und der Bestimmung von Wochentagen und exakten Zeitdifferenzen vom kommerziellen Versicherungsprogramm (mit Geburten im letzten Jahrhundert und Projektionen ins nächste) bis zum Messwert-Erfassungsprogramm für Luftreinhalteparameter immer wieder neu stellt, habe ich die kleinen Funktionen, die hier vorgestellt werden, in den letzten fünfzehn Jahren schon in mindestens vier Programmiersprachen verwendet. Die letzte Portierung nach C war für mich der Anlass, diese so überaus nützlichen Formeln zu publizieren, da ich vermute, dass sie bei so intensiver Nutzung meinerseits vielleicht auch für andere von Interesse sind.
Kronzeugen
Es stellt sich als praktisch heraus, jedem Tag eine laufende Nummer zuzuordnen, die von einem festen Stichdatum ab gezählt wird. Indem man den Rest dieser Tagesnummer bei Division durch Sieben betrachtet, erhält man den Wochentag. Auf dieses praktische Verfahren stiess ich vor einigen Jahren bei der Lektüre von Arno Schmidt's Essay über die Julianischen Tage, wo er, als Kronzeugen Humboldt und Gauss zitierend, nachweist, wie praktisch eine solche Tagesnummer ist, indem er zeigt, dass in Goethes Werther der Vollmond bewundert wird, während an dem betreffenden Datum eigentlich Neumond war, wohingegen der Historiker Gibbon "ein verlässlicher Mann" war. Die erste systematische Einführung der laufenden Tageszählung wird von Schmidt dem französischen Philologen Joseph Justus Scaliger zugeschrieben, der diese in seinem Werk De emendatione temporum (Paris 1583, Genf 1629) unter der Bezeichnung Julianische Tage einführte. Scaliger wählte den 1. 1. 4713 vor unserer Zeitrechnung als Tag 0 und zählt von diesem Datum ab.
Alter und Neuer Stil
In einer der beliebten Umfragen in Amerika sollen mehr als 60% der Befragten vermutet haben, der Satz "Die Sonne dreht sich um die Erde" sei eher wahr, als der Satz "Die Erde dreht sich um die Sonne". Ein noch ernüchternderes Ergebnis erhält man, wenn man seine Mitbürger fragt, wie unser normaler Kalender "funktioniert".
Den meisten ist (mit Hilfe von Knöchel-Abzählen) bekannt, wieviele Tage die Monate haben und dass alle vier Jahre ein Schaltjahr ist, an dem der Februar einen 29. Tag als Schalttag erhält. Manche wissen sogar, dass dies in denjenigen Jahren der Fall ist, deren Jahreszahl durch vier teilbar ist (als Test genügt die Teilbarkeit der letzten zwei Stellen). Dass es den 29. Februar 1900 nie gegeben hat, stösst meistens auf ungläubiges Staunen. Dass es den 29.Februar 2000 (bald!) geben wird, auf verständnisloses Achselzucken. Dabei handelt es sich um eine Ausnahme der Ausnahme, die alle 400 Jahre einmal vorkommt und seit der Einführung des heute bei uns üblichen Kalenders Neuen Stils durch Papst Gregor XIII erst zum zweitenmal statt hat.
Rund 1600 Jahre nach Einführung des Julianischen Kalenders stellte sich heraus, dass Ostern langsam durchs Jahr wanderte. Die genaueren astronomischen Kenntnisse über die Länge des Jahrs führten zur Einführung des sogenannten Gregorianischen Kalenders, auch Neuer Stil genannt, in welchem alle Jahre, die durch hundert teilbar sind, von der vierjährigen Schaltjahrregel ausgenommen sind (wie etwa das Jahr 1900) und nur die durch 400 teilbaren Jahre trotzdem einen Schalttag erhalten (wie etwa das Jahr 2000). Im heute üblichen Neuen Stil hat die 400-Jahrperiode also 97 Schalttage.
Es soll das Verhältnis eines Tages zum mittleren Sonnenjahre in möglichst kleinen Zahlen näherungsweise ausgedrückt werden.
Da dieses Jahr gleich 365 Tagen 5 Stunden 48 Minuten 55 Sekunden ist, so hat dasselbe, wenn man die Stunden, Minuten und Sekunden als Bruchteile eines Tages ausdrückt, Tage. Man braucht daher nur diesen Bruch [als Kettenbruch, H.T.] zu entwickeln, wodurch man die folgenden Quotienten:
4, 7, 1, 6, 1, 2, 2, 4,
und hieraus die Brüche:
, , , , , , , ...
erhält. Die Stunden, Minuten und Sekunden zusammengenommen, welche das Jahr mehr als 365 Tage enthält, machen also alle vier Jahre ungefähr einen Tag aus. Darauf beruht der Julianische Kalender. Genauer gerechnet, ist in 33 Jahren ein Ueberschuss von 8 Tagen, oder in 747 Jahren ein solcher von 181 Tagen, in 400 Jahren also ein Überschuss von 97 Tagen vorhanden. Während also der Julianische Kalender in diesem Zeitraum 100 Tage einschaltet, verwandelt der Gregorianische in je 400 Jahren drei Schaltjahre in gemeine Jahre.
In den katholisch dominierten Orten liess man gleichzeitig mit der Einführung dieses genaueren Kalenders die zehn Tage zwischen dem 4. und dem 15. Oktober 1582 aus, um Ostern wieder in die richtige Jahreszeit zu verschieben. Evangelische, protestantische und orthodoxe Gebiete machten den Schritt vom Alten Stil zum Neuen Stil erst Jahrhunderte später. Die reformierten Kantone der Schweiz liessen etwa die ersten 11 Tage des Achzehnten Jahrhunderts aus und begannen dieses mit dem 12. Januar 1701. Dass der Jahrestag der Oktoberrevolution in der DDR immer anfang November gefeiert wurde, ist ein Hinweis dafür, dass der Alte Stil in Russland erst in diesem Jahrhundert abgelöst wurde.
Die Konversionen
Um die Konversionen juliandays und juliandate zu verstehen, braucht man nur noch die Information, dass Scaliger im Alten Stil rechnete, als er das Datum 1.1.4713 v.u.Z. als Tag 0 annahm, und dass traditionellerweise nie mit einem Jahr 0 gerechnet wurde, sondern auf das Jahr 1 vor Christi Geburt das Jahr 1 nach Christi Geburt folgte.
In der Funktion juliandays wird angenommen, dass die Daten vor unserer Zeitrechnung mit einer negativen Jahreszahl angedeutet werden. Als erstes wird also für Daten vor Christus die "astronomische" Zeitrechnung eingeführt, die ein Jahr 0 sehr wohl kennt. Als nächstes verlegen wir den Jahresbeginn auf den ersten März, wo er historisch wohl auch einmal lag, indem wir Januar und Februar zum Vorjahr schlagen. Das hat den nicht zu unterschätzenden Vorteil, dass der Schalttag ans Ende des Jahres zu liegen kommt. Gleichzeitig reformieren wir die Monatszählung, die nun von 0 bis 11 statt von 1 bis 12 läuft. Als nächstes berechnen wir die Anzahl Tage, die seit dem 1.3.4801 v.u.Z vergangen sind. Wir benützen diese runde Jahreszahl sowohl für den Gregorianischen als auch für den Julianischen Kalender, da das astronomische Jahr -4800 durch 400 (und somit durch 100 und 4 teilbar ist), und daher die Schalttagzählung vereinfacht. Die den Jahren entsprechende Anzahl Tage erhalten wir einfach durch Multiplikation mit 365 und die Berechnung der Anzahl Schalttage, die seit diesem Stichdatum eingeschaltet wurden.
Zu dieser Zahl der Tage der vergangenen Jahre addieren wir den Tag im Jahr, und erhalten so die Anzahl Tage, die seit dem 1.3.4801 v.u.Z. vergangen sind. Für die Anzahl Tage der vergangenen Monate setzen wir den Monat mit 30 Tagen an und addieren dann eine "magische" Korrektur [3*mon+2)/5], die uns die Unregelmässigkeiten der Monatlängen berechnet, ohne dass wir Platz für eine weitere Lookup-Tabelle zu verschwenden brauchen. Schliesslich erweisen wir Scaliger eine Reverenz und ermöglichen die Überprüfung unserer Berechnungen anhand von publizierten Tabellen und Beispielen, indem wir die Anzahl Tage zwischen dem 1.3.4801 v.u.Z. und dem 1.1.4713 v.u.Z. im Alten Stil subtrahieren.
Die Konversion zurück von einem Julianischen Tag zu einem Datum in der Funktion juliandate ist Schritt für Schritt die Umkehrung des vorherigen. An zwei Stellen sind wir hier zu einer kurzen Schleife gezwungen, was dieser Funktion ein etwas komplizierteres Aussehen gibt. Als erstes wird also die Normalisierungskorrektur addiert, welche die Zählung auf den 1.3.4801 v.u.Z. bezieht. Dann wird das Jahr "geschätzt" und anhand der Schalttagberechnung in einer Schleife korrigiert. Der Rest wird in Monat und Tag aufgeteilt mit einer ähnlichen Korrekturschleife unter Benutzung der magischen Monatskorrekturformel. Schliesslich wird der Jahresanfang wieder vom 1. März zurück auf den 1. Januar verschoben und bei Daten vor unserer Zeitrechnung noch die Jahreszahl der nullfreien Tradition angepasst.
Nutzen
Diese ganze Datumsjongliererei nimmt sich bis hier immer noch etwas esotherisch und gelahrt aus. Wieso soll das so praktisch sein, dass man es in fast jeder Anwendung – und nicht nur als Historiker oder Scholast – braucht? Aus dem Format der Julianischen Tage als double precision IEEE real ergeben sich aber sofort eine Menge nützliche Funktionen: der Wochentag eines beliebigen Datums bestimmt sich durch den Rest bei der Division der Julianischen Tageszahl durch Sieben. Ein eingegebenes Datum ist genau dann korrekt, wenn die Konversion in Julianische Tage und zurück wieder auf dasselbe Datum führt. So haben wir alle Monate mit verschiedener Länge und die Schalttage mit ihren Ausnahmen und Ausnahmen der Ausnahmen auf einen Schlag erledigt. Schliesslich lassen sich Zeitdistanzen in Julianischen Tagen absolut und unproblematisch berechnen. Der Tag im Jahr ergibt sich durch die Differenz der Julianischen Tagesnummer des fraglichen Datums und derjenigen des 31.12. des Vorjahres. Die Kalenderwoche, Lieblingskind aller modernen Management-CASE-Tools, ergibt sich leicht unter Berücksichtigung der Tatsache, dass 1976 international vereinbart wurde, dass die Woche am Montag beginnt, obwohl der Herr ursprünglich am Sabbat ruhte und somit wohl am Sonntag mit der Schöpfung begann.
Die Verwendung von Gleitkommazahlen ermöglicht die Tageszeit zusammen mit der Tagesnummer zu speichern. Um die Auflösung im Sekundenbereich zu garantieren, ist die Verwendung von reals doppelter Präzision angezeigt. So kann man beliebige Zeiten zu einem Datum addieren und dieses wieder in unser knorriges nicht-dezimales Kalenderdatum verwandeln.
Zugegeben, bis zum 28. Februar 2100 wird man den Unterschied einer sauberen Gregorianischen Kalenderrechnung und einer primitiven Viererregel kaum sehr häufig bemerken. Die paar Daten in unseren Verwaltungen, die sich aufs letzte Jahrhundert beziehen, sind auch stark am Abnehmen. Die Schönheit der genauen gregorianischen Schalttagberechnung ist also reiner Luxus. Dass man aber auf knappen zwei Seiten eine seriöse Datumsverifikation besitzt, (deren Gregorianische Präzisierung genau zwei Zeilen extra kostet), ist für jede Anwendung, wo Kalenderdaten eingegeben und (sei's auch nur auf Korrektheit) verifiziert werden müssen, nicht zu verachten.
29.12.91 H.T.
Quelltext
C/C++ Headerdatei für Berechnung julianischer Tage:julian.h
C Quellcode für Berechnung julianischer Tage:julian.c
Fussnoten
1 Arno Schmidt: Aus Julianischen Tagen, Fischer Taschenbuch 1926, Frankfurt am Main, 1979. Heute wohl bei Haffmans erhältlich.
2 Obwohl sich die Bezeichnung offiziell auf Julius Cäsar bezieht, den Begründer des Julianischen Kalenders (Julianische Kalenderreform: 46 vor unserer Zeitrechnung), dürfte für diese Bezeichnung eine Rolle gespielt haben, dass Scaligers Vater mit Vornamen Julius Cäsar hiess.
3 Es ist nämlich
86400 / 20935 = 4 Rest 2660
20935 / 2660 = 7 Rest 2315
2660 / 2315 = 1 Rest 345
2315 / 345 = 6 Rest 245
345 / 245 = 1 Rest 100
245 / 100 = 2 Rest 45
100 / 45 = 2 Rest 10
45 / 10 = 4 Rest 5
10 / 5 = 2 Rest 0
und daher
H.T.
4 Leonhard Euler: Einleitung in die Analysis des Unendlichen (Introductio in Analysin Infinitorum), Springer-Verlag, Berlin-Heidelberg-New York, 1983, Reprint der deutschen Übersetzung von H. Maser erschienen im Verlag von Julius Springer 1885, Seiten 318/9.
5 etwa in: Butkewitsch/Selikson: Ewige Kalender, BSB B.G. Teubner Verlagsgesellschaft, Leipzig, 1976.