Advanced  Services C#-Praktikum Back Next Up Home
Kalenderberechnungen

Siehe auch  Gregorianischer und julianischer Kalender
Schreiben Sie die folgenden statischen Methoden

  1. Eine Methode   bool 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-11 234 567
    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.

  2. Eine Methode   bool 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 .

  3. 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

  4. 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.

  5. 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

Valid XHTML 1.0 Strict Lösung top Back Next Up Home