Feiertage berechnen und berücksichtigen - Teil 1

Prüfen, ob ein Datum ein Feiertag ist

Wenn es Sie weniger interessiert, wann welche Feiertage liegen, als vielmehr, ob ein bestimmtes Datum irgendein Feiertag ist, sollten Sie dazu noch eine Methode erstellen, die ein vorhandenes Datum daraufhin prüft, ob es sich dabei um einen der berechneten Feiertage handelt (Listing 6).

Public Function istFeiertag(ByRef datDatum As Date, ByRef strName As String) _
As Boolean
Dim lngJahr As Long
lngJahr = Year(datDatum)
If Not IsDate(datDatum) Then
strName = "Das Datum ist nicht gültig!"
istFeiertag = False
Exit Function
Else
If Ostersonntag(lngJahr) = datDatum Then
strName = "Ostersonntag"
istFeiertag = True
ElseIf Karfreitag(lngJahr) = datDatum Then
strName = "Karfreitag"
istFeiertag = True
ElseIf Ostermontag(lngJahr) = datDatum Then
strName = "Ostermontag"
istFeiertag = True
ElseIf Pfingstsonntag(lngJahr) = datDatum Then
strName = "Pfingstsonntag"
istFeiertag = True
ElseIf Pfingstmontag(lngJahr) = datDatum Then
strName = "Pfingstmontag"
istFeiertag = True
ElseIf Advent1(lngJahr) = datDatum Then
strName = "1. Advent"
istFeiertag = True
ElseIf Advent2(lngJahr) = datDatum Then
strName = "2. Advent"
istFeiertag = True
ElseIf Advent3(lngJahr) = datDatum Then
strName = "3. Advent"
istFeiertag = True
ElseIf Advent4(lngJahr) = datDatum Then
strName = "4. Advent"
istFeiertag = True
ElseIf Bussundbetag(lngJahr) = datDatum Then
strName = "Buß- und Betag"
istFeiertag = True
ElseIf Totensonntag(lngJahr) = datDatum Then
strName = "Totensonntag"
istFeiertag = True
ElseIf Volkstrauertag(lngJahr) = datDatum Then
strName = "Volkstrauertag"
istFeiertag = True
ElseIf Erntedank(lngJahr) = datDatum Then
strName = "Erntedank"
istFeiertag = True
ElseIf Muttertag(lngJahr) = datDatum Then
strName = "Muttertag"
istFeiertag = True
Else
'Prüfen, ob ein fixer Feiertag vorliegt
strName = FixFeiertag(datDatum)
If strName > "" Then
istFeiertag = True
End If
End If
End If
End Function
Public Function FixFeiertag(datDatum As Date) As String
'Prüft, ob es sich bei dem Datum um einen fixen Feiertag handelt
'Falls ja, wird der Name des Feiertags zurückgegeben
FixFeiertag = ""
End Function
Public Function IstSonntag(datDatum As Date) As Boolean
If Weekday(datDatum, vbSunday) = 1 Then
IstSonntag = True
Else
IstSonntag = False
End If
End Function
Public Function IstSamstag(datDatum As Date) As Boolean
If Weekday(datDatum, vbSunday) = 7 Then
IstSamstag = True
Else
IstSamstag = False
End If
End Function

Dazu übergeben Sie das zu prüfende Datum an die Methode, die alle eben erstellten Methoden aufruft und prüft, ob das Datum mit dem Rückgabewert der Methode übereinstimmt. Wird eine Übereinstimmung gefunden, wird der Rückgabewert auf true gesetzt. Über den zweiten Parameter der Funktion können Sie dann den Namen des Feiertags zurückgeben. Damit auch fixe Feiertage berücksichtigt werden, wird im Else-Zweig die Methode FixFeiertag aufgerufen. Sie gibt den Namen des Feiertags zurück, der dem übergebenen Datum entspricht. Ist das Datum kein Feiertag, wird eine leere Zeichenfolge zurückgegeben. Vorerst ist die Funktion jedoch noch leer. Sie wird im nächsten Teil dieser Artikelfolge gefüllt.

Optimal wäre außerdem noch eine Funktion, die True zurückgibt, wenn das übergebene Datumein Sonntag oder ein Samstag ist. Damit Sie das unterscheiden können, sollten Sie dazu zwei verschiedene Methoden erstellen.

Wie geht es weiter?

Damit haben Sie nun alle Methoden erstellt, die Sie zur Berechnung der variablen Feiertage benötigen. Im nächsten Teil der Artikelfolge wird eine Methode gezeigt, mit der Sie feste Feiertage erfassen und berücksichtigen können. Darüber hinaus erfahren Sie, wie Sie die Klasse sinnvoll einsetzen.