Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Allgemein / Zeit / Schaltjahr

Schaltjahr bestimmen

Einleitung

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.

Code: Umsetzung der Festlegung

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

Code: DateSerial verwenden

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!

Das Jahr 3200/3600

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! Smile!

© Jost Schwider, 05.07.2001-05.07.2001 - http://vb-tec.de/schltjhr.htm