Kontakt
DSVGO
Ein astronomisches Jahr (eine volle Umkreisung der Erde um die Sonne) dauert etwa 365,24 Tage. Um diese krumme Zahl in einen Kalender zu pressen, hat Papst Gregor in seiner Kalender-Reform entsprechende Schalttage eingefügt, so dass z.B. die Tag/Nachtgleiche immer auf den 21.3. und 21.9. fällt.
Um herauszufinden, ob ein gegebenes Jahr ein Schaltjahr ist, muss man die folgende Festlegung kennen: Alle durch 4 teilbaren Jahreszahlen sind Schaltjahre, aber nicht die durch 100 teilbaren, es sei denn sie sind sogar durch 400 teilbar.
Also ist 1996 ein Schaltjahr gewesen, 1900 nicht, 2001 auch nicht, 2000 jedoch schon.
Man kann die o.g. Festlegung direkt in einen Algorithmus umsetzen:
Public Function Schaltjahr( _ Optional ByVal Jahr As Integer = -1 _ ) As Boolean 'Default ist aktuelles Jahr: If Jahr = -1 Then Jahr = Year(Now) 'Festlegung anwenden: If Jahr Mod 4 = 0 Then 'durch 4 ohne Rest teilbar! If Jahr Mod 100 = 0 Then If Jahr Mod 400 = 0 Then Schaltjahr = True Else Schaltjahr = True End If End If End Function
Die VB-Funktion DateSerial rechnet auch mit Überläufen, d.h. aus dem Tag vor dem "1.5.2001" (ergo "0.5.2001") wird automatisch "30.4.2001" gemacht. So kann also leicht festgestellt werden, ob der Februar 29 Tage hat, und damit ein Schaltjahr vorliegt:
Public Function Schaltjahr( _ Optional ByVal Jahr As Integer = -1 _ ) As Boolean 'Default ist aktuelles Jahr: If Jahr = -1 Then Jahr = Year(Now) 'Den Tag vor dem 1.3. bestimmen: Schaltjahr = Day(DateSerial(Jahr, 3, 0)) = 29 End Function
Das sieht doch sehr elegant aus, nicht wahr? Leider hat diese zweite Variante einen kleinen Nachteil: Sie benötigt im Vergleich zur ersten über 25-mal länger!
Die Gelehrten streiten sich noch, ob nicht ein Schalttag in den 3000er ausfallen soll: Entweder im Jahr 3200 oder im Jahr 3600 wird es keinen 29. Februar geben - nehmen Sie sich für diese Tage also nichts vor!
© Jost Schwider, 05.07.2001-05.07.2001 - http://vb-tec.de/schltjhr.htm