Eine Programmbibliothek zur Bestimmung des Zeitpunkts von Ereignissen.
Die Programmbibliothek Zeitrechnung dient zur Bestimmung des Zeitpunkts von Ereignissen wie beispielsweise Feier- und Gedenktage oder Jahreszeiten. Die Zeitpunkte solcher Ereignisse werden zu einem Teil nach Kriterien bestimmt, die mit dem Kalendersystem zu tun haben, das im jeweiligen Kulturkreis üblich ist oder war. Zu einem anderen Teil unterscheiden sich die Wege, wie unterschiedliche Ereignisse bestimmt werden auch, wenn sie im selben Kalendersystem bestimmt werden.
Die Programmbibliothek Zeitrechnung führt diese verschiedenen Wege der Bestimmung von Zeitpunkten zu einer gleichartigen Vorgehensweise zusammen und vereinfacht damit den Ablauf deutlich.
Ereignisse
Zentrales Element der Programmbibliothek Zeitrechnung sind ihre Ereignisklassen. Jede Ereignisklasse repräsentiert eine bestimmte Art von Ereignis. Die folgende Tabelle zeigt die Ereignisklassen, die mit der Zeitrechnung bestimmt werden können.
Ereignis-Typen
Nr | Klasse | Typ |
---|---|---|
1 |
DatumEreignis |
Festes Datum im gregorianischen Kalender |
2 |
TagWocheMonatEreignis |
n-ter Tag in einem Monat z.B. dritter Mittwoch im Mai |
3 |
TagDatumEreignis |
Wochentag vor oder nach einem Datum, z.B. Totensonntag: fünfter Sonntag vor dem 24.12. oder Freitag vor dem Mittsommertag (24.6.) |
4 |
OsterEreignis |
Anzahl Tage vor oder nach Ostern |
5 |
JahreszeitEreignis |
Zeiten der Sonnenwenden und Tagundnachtgleichen |
6 |
HebraeischesEreignis |
Festes Datum im hebräischen Kalender |
7 |
EinzelEreignis |
Ereignisse mit individueller Berechnungsmethode |
8 |
MuslimischesEreignis |
Festes Datum im muslimischen Kalender |
9 |
JulianischesEreignis |
Festes Datum im julianischen Kalender |
10 |
ChinesischesEreignis |
Festes Datum im traditionellen chinesischen Kalender |
Die API-Dokumentation beschreibt die Ereignisklassen im Detail.
Parameter
Jede Ereignisklasse erfordert eine Definition aus Parametern, die ein Ereignis der Klasse genau definiert. In der nachfolgenden Tabelle sind die Parameter genannt, mit denen ein Ereignis der jeweiligen Klasse definiert wird.
Nr | p1 | p2 | p3 | p4 | p5 |
---|---|---|---|---|---|
1 |
Monat |
Tag im Monat |
- |
- |
- |
2 |
Wochentag |
Monat |
wievielter, |
- |
- |
3 |
Wochentag |
Monat |
Tag 1-31 |
wievielter vor (-) |
1=greg., |
4 |
Anzahl Tage vor (-) |
1=westlich, |
- |
- |
- |
5 |
Typ |
- |
- |
- |
- |
6 |
Monat des hebräischen Kalenders |
Tag im Monat |
- |
- |
- |
7 |
Typ |
- |
- |
- |
- |
8 |
Monat des muslimischen Kalenders |
Tag im Monat |
- |
- |
- |
9 |
Monat |
Tag im Monat |
- |
- |
- |
10 |
Monat |
Tag im Monat |
- |
- |
- |
Als Monat wird ein Ganzzahl-Wert von 1 (Januar) bis 12 (Dezember) erwartet. Hierfür kann auch Definition.JANUAR
, Definition.FEBRUAR
genutzt werden. Als Wochentag gelten Ganzzahl-Werte von 0 (Sonntag) bis 6 (Samstag) oder auch Definition.MONTAG
, Definition.DIENSTAG
, usw. Die Werte für andere Kalendersysteme sind in der jeweiligen Klasse deklariert, z.B. HebraeischerKalender.NISAN
, usw.
Als Typ der Klasse JahreszeitEreignis
wird einer der Typen, JahreszeitEreignis.SOMMER_SONNENWENDE
, JahreszeitEreignis.WINTER_SONNENWENDE
, JahreszeitEreignis.HERBST_TAGUNDNACHTGLEICHE
und JahreszeitEreignis.FRUEHLINGS_TAGUNDNACHTGLEICHE
verwendet. Die Klasse EinzelEreignis
definiert in vergleichbarer Weise die möglichen Typen.
Die Ereignisdefinition wird für ein Ereignisobjekt jeweils mit der Methode setDefinition
gesetzt. So ergibt stets die Kombination aus Klasse und Definition die Art, wie der Zeitpunkt eines Ereignisses bestimmt wird. Eine Ausnahme hiervon ist die Klasse JahreszeitEreignis
, bei der zusätzlich die Position angegeben werden muss, wenn die Jahreszeiten der südlichen Hemisphäre bestimmt werden sollen, anderenfalls werden standardmäßig die Jahreszeiten der nördlichen Hemisphäre bestimmt.
Beim TagDatumEreignis
kann der gregorianische oder julianische Kalender als Grundlage dienen. Beispielsweise werden der 1. bis 4. Advent nach christlich-orthodoxer Methode ausgehend vom 24.12. im julianischen Kalender bestimmt.
Zeitpunkt bestimmen
Die Bestimmung des Zeitpunkts von Ereignissen erfordert stets die Angabe von
- Ereignis-Typ
-
Die allgemeine Form der Bestimmung, zum Beispiel eine "Anzahl von Tagen vor oder nach einem Datum" oder "Anzahl von Tagen vor oder nach Ostern", usw.
- Ereignis-Definition
-
Die einzelne Ausprägung eines Ereignis-Typs, zum Beispiel "Freitag vor dem Mittsommertag" oder "50 Tage nach Ostern" oder "zweiter Mittwoch im Mai", usw.
- Zeitraum
-
Die Angabe des Zeitraums, für den die Zeitpunkte eines oder mehrerer Ereignisse bestimmt werden sollen. Die Ereignisklassen der Programmbibliothek Zeitrechnung verwenden als Zeitraum jeweils ein Jahr des gregorianischen Kalenders. Mit den Klassen der einzelnen Kalendersysteme lassen sich zudem beliebige andere Zeiträume zur Bestimmung der Zeitpunkte von Ereignissen anwenden.
Alle Ereignisklassen der Programmbibliothek Zeitrechnung implementieren die Schnittstelle Ereignis
und bieten damit eine einheitliche Form, wie der Zeitpunkt eines Ereignisses bestimmt werden kann. Das folgende Beispiel zeigt die über alle Ereignisklassen gleichartige Vorgehensweise.
// Ereignis-Definition befuellen
Definition def = new Definition();
def.setName("Muttertag");
def.setp1(Definition.SONNTAG);
def.setp2(Definition.MAI);
def.setp3(2);
// ein Ereignisobjekt erstellen
TagWocheMonatEreignis ereignis = new TagWocheMonatEreignis();
// dem Ereignis-Objekt die Definition uebergeben
ereignis.setDefinition(def);
// Zeitpunkt(e) bestimmen und ausgeben
List<Datum> zeitpunkte = ereignis.getZeitpunkte(2022);
for(Datum d : zeitpunkte) {
System.out.println(def.getName() + ": " + d.getTag() + "." + d.getMonat() + "." + d.getJahr());
}
Zunächst wird ein Objekt der zum Ereignistyp passenden Klasse erstellt. Mit der Methode setDefinition
werden dem Objekt die Parameter übergeben, die das Ereignis eindeutig definieren. Mit Aufruf der Methode getZeitpunkte
wird eine Liste von Objekten der Klasse Datum
ausgegeben, die alle Zeitpunkte im fraglichen Jahr kennzeichnet. In den allermeisten Fällen enthält die Liste ein Datum, aber es gibt Fälle, in denen ein Ereignis mehrmals in einem westlichen Jahr auftritt, bspw. für Ereignisse im Hebräischen, Muslimischen oder Julianischne Kalender.
Kalender
Der Lauf der Zeit lässt sich an astronomischen Ereignissen wie der Bewegung der Erde um die Sonne sowie der Drehung der Erde um sich selbst oder auch dem Lauf des Mondes um die Erde erkennen. Die Himmelsmechanik bestimmt Tag, Nacht, Jahreszeiten und Jahre. Kalender bilden diese Ereignisse ab, indem sie die Zeit entsprechend in Tage, Wochen, Monate, Jahreszeiten und Jahre teilen und diese zählen.
Mit Kalendern lassen sich wiederkehrende Ereignisse wie Mondphasen, die Abfolge von Tagen, Jahreszeiten und Jahre bestimmen und einteilen.
In unterschiedlichen Kulturen fanden zu einer Zeit jeweils auch unterschiedliche Kalendersysteme Anwendung und tun es noch. Aus diesem Grund ergibt sich zur Verfolgung unterschiedlichster Ereignisse die Notwendigkeit, eine Möglichkeit zur Umwandlung zwischen verschiedenen Kalendersystemen zu schaffen, damit Ereignisse unterschiedlicher Kulturen, Orte und Zeiten unabhängig vom verwendeten Kalendersystem beobachtet und abgebildet werden können.
Unser Kalender in der westlichen Welt beruht auf dem gregorianischen Kalendersystem, das in manchen Ländern am 15. Oktober 1582 und in anderen Ländern später in Kraft trat. Im Kontext der Programmbibliothek Zeitrechnung repräsentiert die Klasse ISOKalender
den gregorianischen Kalender. Davor galt der von Julius Cäsar 45 v. Chr. eingesetzte Julianische Kalender.
Weitere Kalendersysteme, die weltweit verwendet werden, sind das muslimische Kalendersystem, das hebräische Kalendersystem, das traditionell chinesische Kalendersystem, das persische, das buddhistische sowie das hinduistische Kalendersystem, die jeweils zur Abbildung und Bestimmung von in diesen Kulturen wichtigen Ereignissen dienen.
Da Ereignisse auf unterschiedlichen Kalendersystem beruhen können, ist eine zentrale Funktion der Zeitrechnung die Umrechnung eines Datums aus einem anderen Kalendersystem jeweils in das gregorianische Kalendersystem.
Gregorianischer Kalender
Der gregorianische Kalender, auch bürgerlicher Kalender, ist der heute weltweit meistgebrauchte Kalender. Er entstand gegen Ende des 16. Jahrhunderts durch eine Reform des julianischen Kalenders. Benannt ist er nach Papst Gregor XIII., der ihn 1582 verordnete. Er löste im Laufe der Zeit sowohl den julianischen als auch zahlreiche andere Kalender ab und bildet die Basis der Datumsdarstellung nach ISO 8601.
Eine wesentliche Verbesserung dieses Kalendersystems ist die gegenüber dem Julianischen Kalender geänderte Regel für Schaltjahre. Diese besagt, dass volle Jahrhunderte (wie 1700, 1800, 1900 usw.) nur dann Schaltjahre sind, wenn sie durch 400 teilbar sind. Daher war beispielsweise das Jahr 2000 ein Schaltjahr, das Jahr 1900 dagegen nicht.
Der gregorianische Kalender bildet damit das tropische Jahr (Sonnenjahr) nach, so dass der kalendarische Beginn eines Jahres stets zur der Zeit stattfindet, zu der die Erde die Sonne einmal umrundet hat.
Tage beginnen im gregorianischen Kalender um Mitternacht.
Gregorianische Jahreszählung
Die Zeitrechnung des gregorianischen Kalenders beginnt in dem Jahr, das Christen als das Jahr der Geburt Christi ansehen. Jenes Jahr ist das Jahr 1 im gregorianischen Kalender, das am 31.12.1 endete. Nach gregorianischer Jahreszählung ist am 1. Januar 2 ein Jahr vergangen, man befindet sich im zweiten Jahr, das am 31.12.2 endet, usw.
Ein Jahr null gibt es in der von den Historikern angewendeten traditionellen christlichen Zeitrechnung nicht, wohl aber in der astronomischen Jahreszählung sowie der internationalen Zeitnorm ISO 8601.
Im traditionellen System werden die Jahre mit Ordinalzahlen vor und nach der Geburt Christi gezählt: Das Jahr 1 vor Christi Geburt endet am 31. Dezember (1 v. Chr.), am nächsten Tag, dem 1. Januar, beginnt das Jahr 1 nach Christi Geburt (1 n. Chr.).
Die astronomische Jahreszählung verwendet hingegen die um die Null und die negativen Zahlen erweiterten natürlichen Zahlen, die sogenannten ganzen Zahlen. Die in dieser Zahlenreihe enthaltene 0 wird dem Jahr 1 v. Chr., die Zahl −1 dem Jahr 2 v. Chr. zugeordnet.
Julianischer Kalender
Der julianische Kalender ist einer der ältesten Solarkalender und Vorläufer des heute gebräuchlichen gregorianischen Kalenders. Er wurde im Jahr 45 v. Chr. von Julius Caesar, daher auch der Name „julianischer“ Kalender, im Römischen Reich eingeführt.
Als Solarkalender bildet der julianische Kalender das tropische Jahr nach. Das julianische Jahr ist gegenüber dem Sonnenjahr allerdings um 11 Minuten und 14 Sekunden zu lang. Dies führte zu einer zunehmenden Abweichung vom tatsächlichen Lauf der Erde um die Sonne, die bspw. im 14. Jahrhundert schon mehr als sieben Tage betrug.
Julianische Jahreszählung
Die heute gebräuchliche Jahreszählung des julianischen Kalenders, die sich am Jahr der Geburt Christi gemäß christlichem Glauben orientiert, wurde 525 eingeführt.
Bei der Einführung des julianischen Kalenders wurden in den verschiedenen Teilen des Römischen Reiches verschiede andere Jahreszählungen verwendet: Im Westen des Römischen Reiches wurde meist nicht durchgezählt, die Jahre wurden nach den beiden jeweils für ein Jahr amtierenden Konsuln benannt.
Daneben wurde auch die Zählung „ab Gründung der Stadt (Rom)“ oder die diokletianische Ära benutzt. Im Osten war die Seleukidische Ära üblich, die 312 v. Chr. als Jahr Eins zählte. Später setzte sich im Westen die bis heute übliche christliche Zeitrechnung durch, im Osten war noch lange die Zeitrechnung „ab der Erschaffung der Welt“ (Annus mundi) üblich, die von den Byzantinern auf das Jahr 5509 v. Chr. angesetzt wurde.
Muslimischer Kalender
Der muslimische Kalender ist ein reiner Mondkalender. Seine Jahre beginnen unabhängig vom Lauf der Erde um die Sonne Jahr für Jahr jeweils zu unterschiedlichen Zeiten eines tropischen Jahres. Das muslimische Jahr kennt 12 Monate (Anzahl Tage in Klammern) Muharram (30), Safar (29), Rabi 1 (30), Rabi 2 (29), Jumada 1 (30), Jumada 2 (29), Rajab (30), Shaban (29), Ramadan (30), Shawwal (29), Dhu al-Qa’da (30), Dhu al-Hijja (29/30).
Die Woche beginnt mit Sonntag wobei die Tage von Sonntag bis Donnerstag durchgezählt werden: Sonntag jaum al-ahad (der erste Tag), Montag jaum al-ithanaya (der zweite Tag), Dienstag jaum al-thalatha (der dritte Tag), Mittwoch jaum al-arba’a (der vierte Tag), Donnerstag jaum al-hamis (der fünfte Tag), Friday jaum al-jum’a (der Tag der Zusammenkunft), Samstag jaum al-sabt (der Ruhetag).
Tage beginnen im muslimischen Kalender bei Sonnenuntergang. Mit der Klassenbibliothek Zeitrechnung errechnete Ereignisse beginnen damit stets am Vorabend des errechneten Datums.
Muslimische Jahreszählung
Die muslimische Zeitrechnung beginnt mit dem Jahr der Auswanderung (Hidschra) des Propheten Mohammed von Mekka nach Medina. Nach christlicher Zeitrechnung war das im Jahr 622. Der Starttag der generischen Tageszählung im muslimischen Kalender ist Freitag, der 16. Juli 622 CE (julianisch) gleichbedeutend mit 1 Muharram 1 AH.
Hebräischer Kalender
Der hebräische Kalender ist ein Lunisolarkalender (Mond-Sonnen-Kalender). Er orientiert sich sowohl am Mondjahr wie auch am Sonnenjahr. Dadurch verschieben sich die Monate im Vergleich zu reinen Sonnenkalendern, da zwölf Mondmonate nur 354 und nicht 365 Tage ergeben. Damit die Monate nicht wie bei reinen Mondkalendern durch das Sonnenjahr wandern, sorgt eine Schaltregel dafür, dass in einem Zyklus von 19 Jahren siebenmal ein dreißigtägiger Schaltmonat vor dem Monat Adar hinzugefügt wird (We-Adar; „noch ein Adar“ oder schlicht Adar II). Dies sorgt für den Ausgleich zu dem um 11 Tage längeren Sonnenjahr.
Tage beginnen im hebräischen Kalender nach Sonnenuntergang. Mit der Klassenbibliothek Zeitrechnung errechnete Ereignisse beginnen damit stets am Vorabend des errechneten Datums.
Hebräische Jahreszählung
Die Zeitrechnung des hebräischen Kalenders beginnt im Jahr 1 Anno Mundi (AM) des hebräischen Monats Tischri, der nach hebräischer Auffassung der Monat ist, in dem die Menschheit erschaffen wurde. 1 Tishri 1 ist nach hebräischer Zeitrechung der erste Tag des ersten Jahres. Am 1 Tischri 2 ist ein Jahr vergangen usw.
Der Tag 1 Tischri 1 AM des hebräischen Kalenders ist vom Patriarch Hillel II. nach den biblischen Chroniken auf den Tag 6. Oktober 3761 v. Chr. im julianischen Kalender datiert worden. Der Datumswechsel vollzieht sich im julianischen und gregorianischen Kalender um Mitternacht, weshalb nach hebräischer Tageszählung unter Beruecksichtigung des Datumswechsels am Vorabend bereits der 7. Oktober des julianischen bzw. der 7. September des gregorianischen Kalenders begonnen hatte.
Mithin ist zur Bestimmung von Zeitpunkten mit der Klassenbibliothek Zeitrechnung der Starttag für die generische Tageszählung im hebräischen Kalender der 7. Oktober 3761 BCE (julianisch).
Die Systematik und Berechnung des hebräischen Kalenders wurde im Wesentlichen durch den Patriarchen Hillel II. im Jahr 359 n. Chr. einheitlich festgelegt und veröffentlicht. Durchgesetzt hat sich die von Hillel II. festgelegte Regelung ab dem 11. Jahrhundert. Der Anfang der Jahreszählung war zuvor auf den Beginn der Seleukiden-Ära 312 v. Chr. festgesetzt.
Davor rechneten jüdische Gemeinden im antiken Griechenland und Makedonien ebenso wie jene in Palästina in der frühen Römerzeit mit einem lunaren Kalender, während Gemeinden in Kleinasien und Syrien den julianischen Kalender verwendeten. Juden in Alexandria wiederum verwendeten einen ägyptischen Mondkalender.
Chinesischer Kalender
Der chinesische Kalender ist eine Kombination aus einem Mond- und einem Sonnenkalender. Entsprechend gibt es parallel das Mondjahr (年, nián) und das Sonnenjahr (歲 / 岁, suì).
Die Einteilung des chinesischen Kalenders beruht auf den exakten astronomischen Stellungen von Mond und Sonne, die Bestimmung von Beginn und Ende jedes Abschnitts erfordert stets die genaue Berechnung des Stands von Sonne und Mond. Mithin variiert die Länge jedes Abschnitts im chinesischen Kalender von Jahr zu Jahr während im gregorianischen Kalender oder den hebräische Lunisolarkalender die Schalttage bzw. Schaltmonate sowie v.a. die Länge der einzelnen Monate feststehen.
Sonnenjahr
Das Sonnenjahr beginnt am Tag der Wintersonnenwende und ist – wie im Gregorianischen Kalender – immer 365 oder 366 Tage lang. Es ist unterteilt in 24 Abschnitte, 12 Haupt- und 12 Nebenabschnitte, die sich jeweils aus dem Stand der Sonne entlang ihrer scheinbaren Bahn am Fixsternhimmel ergibt, wie er von der Erde aus im Laufe eines Jahres gesehen wird (Ekliptik).
Die 12 Hauptabschnitte (Zhongqi) im Sonnenjahr heißen Yǔshuǐ, Chūnfēn (Frühlingstagundnachtgleiche), Gǔyǔ, Xiǎomǎn, Xiàzhì (Sommersonnenwende), Dàshǔ, Chǔshǔ, Qiūfēn (Herbsttagundnachtgleiche), Shuāngjiàng, Xiǎoxuě, Dōngzhì (Wintersonnenwende), Dàhán. Die Namen der 12 Nebenabschnitte (Jiéqì) lauten Lìchūn (Frühlingsanfang), Jīngzhé, Qīngmíng, Lìxià (Sommeranfang), Mángzhòng, Xiǎoshǔ, Lìqiū (Herbstanfang), Báilù, Hánlù, Lìdōng (Winteranfang), Dàxuě, Xiǎohán.
Während im westlichen Kalender die Jahreszeiten mit dem Tag der Sonnenwende bzw. der Tagundnachtgleiche beginnen, liegen im chinesischen Kalender diese Tage in der Mitte der jeweiligen Jahreszeit. Man zählt die Abschnitte des Sonnenjahres beginnend mit dem Frühlingsanfang – Lìchūn, und mancherorts gilt der Frühlingsanfang (und nicht die Wintersonnenwende) als Beginn des Sonnenjahres.
Mondjahr
Das Mondjahr nián wird in Monate (月, yuè – „Mond, Monat“) unterteilt, die jeweils am Tag des Neumonds beginnen und am Tag vor dem nächsten Neumond enden. Ein solcher Mondphasenzyklus (synodischer Monat) dauert im Mittel 29,53 Tage und ist damit etwas kürzer als der mittlere Abstand zwischen zwei Zhongqi. Ein Mondjahr mit 12 Mondmonaten ist ca. 354 Tage lang und damit um ca. 11 Tage kürzer als das Sonnenjahr. Im Mondkalender besteht ein Jahr aus 12 oder 13 Monaten, abhängig davon, wieviele Neumonde zwischen zwei aufeinanderfolgenden Wintersonnenwenden liegen.
Der erste Monat des Mondjahres heißt Zhēngyuè (正月), die weiteren Monate werden von 2 bis 12 durchnummeriert. Der 12. Monat wird auch Làyuè (臘月 / 腊月) genannt. Ein Schaltmonat erhält dieselbe Nummer wie der vorherige Monat. Folgt der Schaltmonat beispielsweise dem zweiten Monat (二月, èryuè), heißt er „zusätzlicher zweiter Monat“ (閏二月 / 闰二月, rùn’èryuè). Die Monate haben 29 Tage (小月, xiǎo yuè – „kurzer Monat“) oder 30 Tage (大月, dà yuè – „langer Monat“).
Ereignisse
Abhängig vom beobachteten Ereignis wird entweder der Mond- oder der Sonnenkalender zur Bestimmung des Zeitpunkts herangezogen. Das chinesische Jahr beginnt wie zuvor erwähnt beispielsweise am Tag der Wintersonnenwende laut Sonnenkalender. Andere Ereignisse finden hingegen an festen Tagen in Monaten des Mondkalenders statt, wie beispielsweise das Drachenbootfest (5.5.) oder das Laternenfest (15.1.), usw.
Chinesische Jahreszählung
Für die Zeitrechnung, also die Datumsangabe und die Zählung der Jahre wird im traditionellen chinesischen Kalender der Mondkalender verwendet. Tage beginnen jeweils um Mitternacht.
Die Zählung der Jahre richtete sich nach der Regierung des Kaisers. Bei der Thronbesteigung proklamierte der Kaiser eine Regierungsdevise, die traditionell aus zwei Schriftzeichen bestand. Oft gab auch ein Kaiser im Laufe seiner Regierungszeit weitere Regierungsdevisen aus. Mit jeder Regierungsdevise begann eine neue Ära mit eigener Zählung der Jahre. Das Jahr 1 wurde Yuan (元, yuán – „Ursprung“) genannt. Die letzte Ära (民國 / 民国, mínguó – „Republik“) wurde nach dem Ende der Kaiserzeit 1912 mit Gründung der Republik China ausgerufen.
Die Jahreszählung wird ergänzt von einem 60-Jahre-Zyklus. Er besteht aus zehn Himmelsstämmen (天干, tiāngān) und den zwölf Erdzweigen (地支, dìzhī), besser bekannt als die zwölf Tierzeichen. Es gibt 60 Kombinationen von Stamm und Zweig (干支, gānzhī) – auch nach der ersten Kombination jiǎzǐ, 甲子 genannt.
Dieser Zyklus ist unabhängig von der jeweiligen Dynastie und somit für eine Jahreszählung und Kalenderberechnung über längere Zeiträume hinweg zuverlässiger als die Berücksichtigung unregelmäßiger Dynastiewechsel.
Die heute verwendete und so mit der Programmbibliothek Zeitrechnung implementierte Fassung des traditionellen chinesischen Kalenders gilt seit der Reform von 1645. Der Start der chinesischen Zeitrechung lässt sich ausgehend vom heutigen chinesischen Datum errechnen. Das erste Jahr des ersten Zyklus faellt so auf den 15. Februar -2636 im gregorianischen Kalender.
Schreibweisen
Mit einem Datum wie beispielsweise 16. Oktober 1964 ist üblicherweise ein Tag im gregorianischen Kalender gemeint. Die folgenden Zusätze kennzeichnen ein Datum eines anderen Kalendersystems.
- v.Chr.
-
"vor Christus". Ein Datum, dessen Jahr vor der Geburt Christi, also die angegebene Anzahl Jahre vor dem Jahr 1 des gregorianischen Kalenders liegt.
- n.Chr.
-
"nach Christus". Ein Datum des gregorianischen Kalenders, wenn nichts weiteres angegeben ist. Weil der gregorianische Kalender der heute übliche Kalender ist, wird diese Angabe in der Regel weggelassen.
- AM
-
"Anno Mundi". Ein Datum im hebräischen Kalender.
- AH
-
"Anno Hegirae". Ein Datum im muslimischen Kalender.
Anstelle von v. Chr. und n. Chr. sind auch die Schreibweisen "vor unserer Zeitrechnung" (v.u.Z.) und "unserer Zeitrechnung" (u.Z.) oder "nach unserer Zeitrechnung" (n.u.Z.) sowie deren englische Pendants "before common era" (BCE) und "common era" (CE) international gebräuchlich. Anstelle von AH wird im deutschen auch "[im Jahr] der Hedschra" (i.H.) geschrieben. Ferner gibt es auch "vor/nach der Zeitrechnung" bzw. "vor/nach der Zeitenwende" (v. d. Z./n. d. Z.).
Der Begriff "common era" geht dabei zurück auf eine Formulierung von Johannes Kepler aus dem Jahr 1615 'annus aerae nostre vulgaris', was im Englischen als 'year of our common era' aufgegriffen und mit der Zeit zunehmend als religionsneutrale Bezeichnung in wissenschaftlichen Kreisen verwendet wurde.
Umrechnung
Zur einheitlichen Umwandlung von einem Kalendersystem in ein anderes dient ein generisches Datum, das auf der Zählung von Tagen beruht. Die Anzahl von Tagen seit einem bestimmten Starttag (vgl. Epoche) ist auch in der Astronomie ein bewährtes Mittel zur rechnerischen Verarbeitung von Zeitspannen (vgl. Julianisches Datum).
Die Programmbibliothek Zeitrechnung verwendet das Datum 1. Januar 1 des gregorianischen Kalenders als Ausgangspunkt der Tageszählung. Dieser Tag ist Tag 1 des generischen Datums und der Ausgangspunkt für Umrechungen zwischen Kalendersystemen. Ausgehend von diesem Tag lässt sich für jedes Kalendersystem eine Anzahl von Tagen errechnen, die den Starttag dieses jeweiligen Kalendersystems darstellt.
Beispielsweise ist das generische Datum des Starttages des hebräischen Kalenders die Anzahl von Tagen, die seit dem Beginn der hebräischen Zeitrechnung bis zum 1. Januar 1 des gregorianischen Kalenders vergangen ist.
Die Programmbibliothek Zeitrechung realisiert für jedes Kalendersystem die Umrechung eines Datums des jeweiligen Kalendersystems in das generische Datum und umgekehrt. Für jedes Kalendersystem existiert eine Klasse, die hierzu die Schnittstelle Wandler
mit den Methoden vonTagen
und zuTagen
implementiert.
Der Rechenweg von einem Kalendersystem in ein anders ist somit:
-
generisches Datum = Quellkalendersystem.zuTagen(Datum im Quellkalendersystem)
-
Datum im Zielkalendersystem = Zielkalendersystem.vonTagen(generisches Datum)
Implementierung
Die Methoden zur Bestimmung der Zeitpunkte von Ereignissen sind in der Programmiersprache Java geschrieben, die mit der Schnittstelle Calendar
eine Möglichkeit etabliert, unterschiedliche Kalendersysteme abzubilden. Die Implementierung von Java in Form der Klasse GregorianCalendar
vermischt jedoch das gregorianische und julianische Kalendersystem und bildet den Wechsel vom julianischen ins gregorianische Kalendersystem in einer Klasse ab. Die Programmbibliothek Zeitrechnung geht einen anderen Weg und sieht für jedes Kalendersystem eine eigene Klasse vor.
Zudem gibt es mit der Klassenbibliothek Joda Time eine ähnliche Möglichkeit zur Bestimmung von Ereigniszeitpunkten, die aber nur einen geringen Teil der Funktionen der Klassenbibliothek Zeitrechnung abdeckt. Joda Time ist nach Java 8 mit der Package java.time
sogar Teil von Java geworden, was angesichts der massiven Größe dieser Implementierung überrascht. Klammert man die Ereignisklassen der Programmbibliothek Zeitrechnung aus, die in Joda Time und java.time
nicht enthalten sind, geraten sie jeweils über das Zehnfache und damit mehr als eine ganze Größenordnung größer als die Klassenbibliothek Zeitrechnung.
Mithin sind mehr als 90% der Funktionalität von java.time
für die Zeitrechnung überflüssig.
Die Klassenbibliothek Zeitrechnung kommt ohne diesen Ballast aus, verzichtet auf die Verwendung von Calendar
, java.time
bzw. Joda Time und kennt eine deutlich größere Zahl an Kalendersystemen. Dadurch entsteht eine universelle, von Grund auf eigene, schlanke und effiziente Implementierung, die noch dazu frei von jeglichen Abhängigkeiten ist.
Neufassung
Ein frühes Ergebnis der Beschäftigung mit Kalender- und Zeitberechnung war die vom Autor entwickelte Standalone-Applikation namens AllDay, die bereits ab ca. 1986 als 'Desk Accessory App' für den Macintosh unter Apple-Nutzern beliebt und verbreitet war, noch bevor das Internet eine neue Ära der Informationstechnologie einläutete.
Zunächst in C gebaut wurde der Code später in Java umgeschrieben und war in seiner jeweiligen Fassung stets die Basis vorangegangener Versionen des heutigen Webkalenders.
Im Zuge verschiedener Anpassungen ist jüngst die Verwendung von Tomcat als Applikationsserver entfallen und der Nutzung von Neon als in die Webanwendung eingebettem HTTP Server gewichen. Der Client-Teil ist als eigenständiger Webclient erhältlich, der als wesentlichen Bestandteil die Monatsbox-Komponente nutzt.
Die seit den Anfängen entstandene zentrale Codebasis des Autors zur Kalender- und Zeitberechung ging bei alledem noch auf die Anfänge zurück und war inzwischen strukturell nicht mehr ganz auf der Höhe der Zeit. Bevor dieser elementare Part auch zugänglich gemacht werden konnte, musste die immer nur 'evolutionär' gewachsene bisherige Klassenbibliothek erst einmal von Grund auf überarbeitet werden.
Die Programmbibliothek Zeitrechnung ist das Produkt dieser Überarbeitung. Sie enthält wiederverwendet weite Teile der bisherigen Codebasis in Form einer strutkurell überarbeiteten und verbesserten Form. In der Endausbaustufe wird sie wieder die Kalendersysteme buddhistisch, christlich, gregorianisch, hebräisch, julianisch, koptisch, muslimisch, persisch, hinduistisch und traditionell chinesisch umfassen.
Anwendung
Zur Verwendung der Programmbibliothek Zeitrechnung wird deren Java-Archiv heruntergeladen und dem Classpath eines Programmes beigegeben, das die Klassenbibliothek nutzen soll. Die API-Dokumentation beschreibt die Funktionen im Detail.
Lizenz
Die Programmbibliothek Zeitrechnung ist Freie Software und wird unter den Bedingungen der GNU Affero General Public License 3.0 bereitgestellt.
Lizenzhinweis
Teile der Programmbibliothek Zeitrechnung implementieren Algorithmen aus dem Buch "Calendrical Calculations: The Millenium Edition", Cambridge University Press von Edward M. Reingold und Nachum Dershowitz aus dem Jahr 2001. Das Buch wird von einer Implementierung in Lisp begleitet, die online erhältlich ist. Der Lisp Code wird unter folgenden Bedingungen öffentlich zugänglich gemacht:
-
Der Lisp Code kann für eigene Zwecke verwendet werden (for personal use).
-
Der Lisp Code kann für Demonstrationszwecke genutzt werden (demonstration purposes).
-
Die Verwendung des Lisp Codes für nicht-kommerzielle Zwecke unter Nennung der Urheber ist erlaubt (non-profit reuse with attribution).
-
Kommerzielle Nutzung des Lisp Codes sollte separat lizensiert werden, sie wird von der Lizenz des Lisp Codes nicht erlaubt.
Die Programmbibliothek Zeitrechnung ist keine Reimplementierung des Lisp Codes sondern enthält eigene Implementierungen einzelner Algorithmen des Buches in Java.
Änderungsverlauf
- Version 1
-
20.1.23
Erste Version der neuen Fassung - Version 2
-
19.3.23
Bestimmung von Ereignissen im hebräischen und muslimischen Kalendersystem
Klasse JulianischerKalender Bestimmung von Jahreszeiten
Berechnung des Sonnenauf- und -untergangs
Dokumentation erweitert - Version 3
-
26.3.2023
Bestimmung von Ereignissen im julianischen und chinesischen Kalendersystem
Dokumentation erweitert