Zeit

Zeit ist etwas sehr faszinierendes und im besonderen ist das Jahr 2000 Problem (Y2K: Year Two Thausend(Kilo)) nur ein kleiner Aspekt. Denn die simple Aufgabe einen Kalender zu berechnen ist wesentlich komplexer als man erwarten würde.

Wann ist Ostern
Wie wird der Ostersonntag berechnet?
Andere Feiertage
Natürlich gibt es noch andere Feiertage und wie berechnet man diese?
1te Kalenderwoche
Welches ist die erste Woche eines Jahres und wie kann es sein, daß Silvester in der 1ten Kalenderwoche liegt?
Schaltjahre
Wieviele Tage hat ein Jahr und warum hat das Jahr 2100 keinen Schalttag?
Jahrtausendwende
An welchem Datum beginnt das dritte Jahrtausend?
Probleme abseits des Jahr 2000 Problemes (Y2K)
Probleme die nicht direkt etwas mit dem Wechsel von 1999 nach 2000 zu tun haben und die Termine.
Jahreskalender in Excel
Ein Kalender als MicroSoft Excel (tm) VBA Code.

Wann ist Ostern

Wie wird der Ostersonntag berechnet?

Auf dem Konzil von Nicäa (325 n. Chr.) wurde festgelegt, daß Ostern immer auf den Sonntag nach dem ersten Frühlingsvollmond fällt. Da die Dauer eines Jahres kein Vielfaches der Dauer eines Mondumlaufs um die Erde bzw., anders ausgedrückt, die Sonnenperiode kein Vielfaches der Mondperiode ist, wird Ostern somit zu einem beweglichen Fest zwischen dem 22. März und 25. April eines jeden Jahres.

Eine offizielle Erläuterung findet sich unter: http://www.ptb.de/de/org/4/43/432/oste.htm

Ostern als VBA-Code:
Public Function Ostern(Jahr As Integer) As Date
    'Ostern nach Physikalisch Technische Bundesanstalt
    'http://www.ptb.de/de/org/4/43/432/oste.htm
    Dim K, M, S, A, D, R, OG, SZ, OE, OS As Integer
    K  = ( Jahr \ 100 )
    M  = 15 + (( 3*K+3 ) \ 4 ) - (( 8*K+13 ) \ 25 )
    S  = 2 - (( 3*K+3 ) \ 4 )
    A  = Jahr Mod 19
    D  = ( 19 * A + M) Mod 30
    R  = ( D \ 29 ) + ( ( D \ 28 ) - ( D \ 29 )) * ( A \ 11 )
    OG = 21 + D - R ' Märzdatum des Ostervollmonds (= 14. Tag des ersten Monats im Mondkalender, genannt Nisanu)
    SZ = 7 - ( (Jahr + ( Jahr \ 4 ) + S ) Mod 7 ) ' - Datum des 1. Sonntags im März
    OE = 7 - ( (OG - SZ) Mod 7 )
    OS = OG + OE
    Ostern = DateSerial( Jahr, 3, OS)
End Function
Ostern als PHP-Code:
function Ostern($year,$add_days=0) { // Ostern (Sonntag)
    //Ostern nach Physikalisch Technische Bundesanstalt
    //http://www.ptb.de/de/org/4/43/432/oste.htm
    $K  = floor( $year / 100 );
    $M  = 15 + floor(( 3*$K+3 ) / 4 ) - floor(( 8*$K+13 ) / 25 );
    $S  = 2 - floor(( 3*$K+3 ) / 4 );
    $A  = $year%19;
    $D  = ( 19 * $A + $M) % 30;
    $R  = floor( $D / 29 ) + ( floor( $D / 28 ) - floor( $D / 29 )) * floor( $A / 11 );
    $OG = 21 + $D - $R;// Märzdatum des Ostervollmonds (= 14. Tag des ersten Monats im Mondkalender, genannt Nisanu)
    $SZ = 7 - ( ($year + floor( $year / 4 ) + $S ) % 7 );// - Datum des 1. Sonntags im März
    $OE = 7 - ( ($OG - $SZ) % 7 );
    $OS = $OG + $OE;
    return DateSerial( $year, 3, $OS, $add_days);
}

Andere Feiertage

Andere Feiertage

Natürlich gibt es noch andere Feiertage und wie berechnet man diese?

Feiertag Datum
Neujahr 01.01.
Muttertag 2. Sonntag im Mai = 15.05. - Wochentag( 01.05. relativ zu Montag=1)
Hl. Drei Könige 06.01.
Valentinstag 14.02.
Weiber Fastnacht Ostern - 52
Rosenmontag Ostern - 48
Aschermittwoch Ostern - 46
Karfreitag Ostern - 2
Ostersonntag Ostern
Ostermontag Ostern + 1
Tag der Arbeit 01.05.
Christi Himmelfahrt
Vatertag
Ostern + 39
Pfingstsonntag Ostern + 49
Pfingstmontag Ostern + 50
Fronleichnahm Ostern + 60
Mariä Himmelfahrt 15.08.
Nationalfeiertag 03.10.
Allerheiligen 01.11.
1. Advent 4ter Sonntag vor dem 1ten Weihnachtstag ( 27.11. - 04.12.)
Weihnachtstag - Wochentag( Weihnachtstag relativ zu Montag=1) - 21
2. Advent Weihnachtstag - Wochentag( Weihnachtstag relativ zu Montag=1) - 14
3. Advent Weihnachtstag - Wochentag( Weihnachtstag relativ zu Montag=1) -  7
4. Advent Weihnachtstag - Wochentag( Weihnachtstag relativ zu Montag=1)
Nikolaus 06.12.
Heiligabend 24.12.
Erster Weihnachtstag 25.12.
Zweiter Weihnachtstag 26.12.
Silvester 12.31.

1te Kalenderwoche

Welches ist die erste Woche eines Jahres und wie kann es sein, daß Silvester in der 1ten Kalenderwoche liegt?

Die folgenden Erklärungen sind nur sinngemäß nach den angegebenen Normen.

DIN EN 28 601

Die erste Kalenderwoche ist die Woche eins Jahres, die den ersten Donnerstag des Jahres enthät.

DIN 13 55

Die erste Kalenderwoche ist die Woche eines Jahres, die mindestens vier von sieben Wochentagen enthält, wobei die Woche mit dem Monatg beginnt. Ein Jahr hat 53 Wochen, wenn es mit Donnerstag beginnt oder endet.


Schaltjahre

Wieviele Tage hat ein Jahr und warum hat das Jahr 2100 keinen Schalttag?
Nach dem gregorianischem Kalender, von Papst Gregor III im Jahre 1582 beschlossen, hat jedes durch 4 teilbare Jahre einen 29. Februar, den Schalttag, alle anderen Jahre haben nur 28 Februartage. Ausgenommen sind die Jahre, die Jahre, die durch 100 teilbar sind, also etwa die Jahre 2000 und 2100. Jedoch haben die Jahre, die wiederum durch 400 teilbar sind trotzdem einen Schalttag, somit auch die Jahre 2000 und 2400.

Diese Regelung umfaßt demnach einen Zeitraum von 400 Jahren und gibt einen durchschnittliche Jahresdauer von 365,2425 Tagen. Dies stimmt, wenn man bedenkt, wann diese Regelung getroffen wurde, erstaunlicherweise ziemlich exakt mit der tatsächlichen Dauer eines Jahres von 365,2422 Tagen überein.


Jahrtausendwende

An welchem Datum beginnt das dritte Jahrtausend?
Nach dem Gregorianischem Kalender findet der Jahrtausenwechsel vom zweiten ins dritte Jahrtausend in der Nacht vom 31.12.2000 auf den 1.1.2001 statt. Dies liegt daran, daß der Kalender mit Christi Geburt im Jahre 1 beginnt, also kein Jahr 0 existiert. Offenbar wollte Papst Gregor nicht, daß Christus im Jahre Null geboren sein sollte und man somit ihn als Null ansehen könne. Dieses Problem ist natürlich prinzipiell und trifft auf jeden Jahrtausendwechsel zu. So endete das erste Jahrtausend am 31.12.1000.

Probleme abseits des Jahr 2000 Problemes (Y2K)

Probleme die nicht direkt etwas mit dem Wechsel von 1999 nach 2000 zu tun haben und die Termine.
01.01.2091 Gültigkeit eines DCF77 Empfängers.

Das PTB ist für die offizielle Zeit in Deutschland zuständig. Sie sendet die offizielle Zeit, die mit DCF77 Empfängern für jeden zur Verfügung steht. Hierüber werden z.B.sp. Server synchronisiert. Das PTB strahlt hierzu ein Signal aus, daß eine Zweistellige Jahreskennung, die Jahreszahl Modulo 100, ausstrahtl. Es gilt nun folgende Regelung

Ist die zweistellige Jahreszahl größer als 90, wird der Wert 1900 dazuaddiert, im anderen Falle der Wert 2000.

Damit ergibt sich der Termin: 01.01.2091


Jahreskalender in Excel.

Ein Kalender als MicroSoft Excel (tm) VBA Code.

Der folgende Kalender besteht aus drei Seiten, die erste enthält dabei jeweils das letzte Jahr, die zweite das aktuelle und die dritte das nächste Jahr. Das Makro schützt alle Zellen, die nicht als Eintragsfelder gedacht sind. Damit sind also alle Zellen, die Tage, Wochen oder Monate enthlten gesperrt. Lediglich das Jahr auf der zweiten Seite ist frei, denn hierüber wird der Kalender neu erstellt. Damit das ganze funktioniert müssen einige vorkehrungen getroffen werden.

1. Startmakro
Beim Aufruf der Seite muß sich der VBA Interpreter irgendwo den Wert der benannten Zelle "Jahr" merken. Denn nur so kann er feststellen, ob ein neuer Wert in der Zelle "Jahr" tatsächlich ein neuer Wert ist, oder irgendeine andere Änderung erfolgte.
2. Registrieren der Änderungen
Es wird weiterhin ein Eventhandler auf die Zelle "Jahr" gesetzt. Da dies nicht direkt möglich ist, muß hierzu ein Umweg benutzt werden. Excel kennt den Change Eventhandler für komplette Arbeitsblätter, übergibt ihm aber das geänderte Range Objekt. Wenn dieses den Namen Jahr hat, so kann der erforderliche Eventhandler aufgerufen werden. Dieser überpüft anhand des vom Startmakro gespeicherten Werte, ob sich das Jahr tatsächlich geändert hat. Es könnte auch eine Formatierungsänderung sein. Wenn festgestellt wird, daß sich das Jahr geändert hat, so wird der Kalender neu erstellt.
3. Das erste öffnen der Datei
Wenn die Datei das erstemal geöffnet wird, so ist sie leer, lediglich eine Sheet hat den Namen "Kalender" und die Zelle A1 den Namen "Jahr". Das Startmakro überprüft genau diese Zelle und stellt fest, daß ihr Wert ungültig ist und es wird ein neuer Kalender fü das aktuelle Jahr erstellt.

Popup beim ersten Öffnen

Excel 97/2000/XP Kalender mit VBA (Excel Datei gezipped) Download ZIP 31.3KB

Excel 97/2000/XP Kalender mit VBA (Code als HTML)

Kalender 2002 [GIF] Download GIF 47.7KB

Kalender 2002 [PNG] Download PNG 26.3KB


© M.Börger