Siehe auch Gregorianischer und julianischer Kalender
Schreiben Sie die folgenden statischen Methoden
- Eine Methode boolean isLeapYear(int) .
leapYear() soll true zurückgeben, falls die übergebene Zahl im Bereich von
1582 bis 3000 liegt (jeweils einschließlich) und ein Schaltjahr ist, andernfalls false .
Erweiterung:
Man kann die obige Methode so erweitern, daß sie auch für Jahreszahlen vor dem gregorianischen
Kalender richtige Ergebnisse liefert. Dazu die folgende Information:
Im Jahre 1582 löste wurde der gregorianische Kalender eingeführt. In den Ländern, die
den Übergang als erste vollzogen, folgte auf Donnerstag, den 4.Oktober sofort der Freitag, 15.Oktober .
Die dazwischen liegende Kalendertage wurden übersprungen. Die seit JDK1.1 existierende Klasse
GregorianCalendar bildet diesen Vorgang exakt ab.
Vor dem gregorianischen Kalender galt der julianische Kalender, den Julius Cäsar 45 v.Chr.
einführte. Mit diesem Kalender wurde zum ersten Mal eine periodische Schaltjahresregel
eingeführt. Jedes vierte Schaltjahr sollte ein Schaltjahr sein und 45 v.Chr. war das erste
Schaltjahr.
Nach Caesars Tod wurde jedoch die Schaltjahresregel falsch angewandt und jedes dritte Jahr zum
Schaltjahr erklärt. Kaiser Augustus erkannte und korrigierte diesen Fehler, in dem er ab dem
jahre 8 v.Chr. für 12 Jahre keine Schaltjahre mehr zuließ.
Damit ergeben sich ab dem Jahre 45 v.Chr. folgende Jahre als Schaltjahre :
-45 | -42 | -39 |
-36 | -33 | -30 |
-27 | -24 | -21 |
-18 | -15 | -12 |
-9 |
Nun tritt die durch Augustus verordnete Schaltjahrpause ein. Die folgende Jahre sind keine Schaltjahre:
-8 | -7 | -6 |
-5 | -4 | -3 |
-2 | -1 | 1 |
2 | 3 | 4 |
5 | 6 | 7 |
Das Jahr 0 hat es nie gegeben, auf 1 v.Chr. folgte sofort 1 n.Chr.
Beginnend mit dem Jahre 8 gilt die einfache Schaltregel, daß jedes durch 4 teilbare Jahr
ein Schaltjahr ist. Diese Regel gilt bis 1582. Ab 1582 gilt die gregorianische Schaltjahresregel:
Ein Jahr ist Schaltjahr, wenn es durch vier, aber nicht durch 100 teilbar ist oder aber durch
400 teilbar ist.
- Eine Methode boolean isDate(int tag, int mon, int jahr) .
isDate() faßt die übergebenen Zahlen als Datum auf und gibt true zurück, falls
es sich um ein gültiges Datum handelt, andernfalls false .
- Eine Methode int getDayOfTheWeek( int tag, int monat, int jahr ) .
Der Methode wird ein Datum im Gültigkeitsbereich des gregorianischen Kalenders übergeben.
Sie liefert 0 für Sonntag, 1 für Montag, 2 für Dienstag usw. zurück und basiert auf der
nachfolgenden Gauß'schen Wochentagsformel. Der erste Tag, für den diese Formel anwendbar
ist, ist der 15.Oktober 1582 (siehe oben). Nach der Gauß'schen Formel muß sich hierfür
Freitag ergeben.
Gauß'sche Wochentagsformel :
Hilfsgrößen h und k bestimmen :
Ist monat <= 2, so ist h = monat + 12 und k = jahr - 1 .
Ist monat > 2, so ist h = monat und k = jahr.
Wochentag bestimmen durch :
wtag = ( tag + 2*h + (3*h + 3)/5 + k + k/4 - k/100 + k/400 + 1 ) % 7
- Eine Methode String getDayOfTheWeek2( int tag, int monat, int jahr ) .
Die Methode arbeitet wie die vorige, gibt jedoch den ermittelten Wochentag als String zurück,
also direkt "Sonntag" , "Montag" , usw.
Erweiterung
Die Gaußsche Formel läßt sich sehr leicht an den Julianischen Kalender
anpassen. Die folgende Formel liefert die richtigen Wochentage im Zeitraum vom Sa, 01.01.0001 - Do, 04.10.1582 :
wtag = ( tag + 2*h + (3*h + 3)/5 + k + k/4 -1 ) % 7
Man kann also die Methoden getDayOfTheWeek bzw. getDayOfTheWeek2 so erweitern, daß sie ab dem 01.01.0001
den richtigen Wochentag zum übergebenen Datum liefern.
- Eine Methode int[] getEaster( int jahr ) .
Die Methode erhält eine Jahreszahl im Bereich des Gregorianischen Kalenders und gibt das
Osterdatum zu diesem Jahr als Feld zurück. Das zurückgegebene Feld hat die Länge 3
und enthält Tag zum Index 0, Monat zum Index 1 und Jahr zum Index 2.
Die Ermittlung erfolgt mit der nachfolgenden Gauß'schen Osterformel
(siehe auch Wann ist Ostern) :
Das Datum wird aus den Werten der beiden Größen d und e ermittelt. Um
allerdings diese zu erhalten braucht man eine eine Reihe von Hilfsgrößen, die wir
a, b, c, p, q, r, x und y nennen. Beachten Sie, wie die Hilfsgrößen
voneinander abhängen.
p = jahr div 100 |
q = p div 3 | r = p div 4 |
x = (15+p-q-r) mod 30 | y = (4+p-r) mod 7 |
a = jahr mod 19 | b = jahr mod 4 |
c = jahr mod 7 |
d = (19*a+x) mod 30 |
e = (2*b+4*c+6*d+y) mod 7 |
Jetzt kann man d und e auswerten
d==28 und e==6 , so gilt : Ostern ist am 18.April
d==29 und e==6 , so gilt : Ostern ist am 19.April
ansonsten gilt
ist 22+d+e < 32 , so folgt : Ostern ist am (22+d+e). März
ist 22+d+e >=32 , so folgt : Ostern ist am (d+e-9). April
Siehe auch Gregorianischer und julianischer Kalender
|