Public Class cFeiertage Private _Year As Integer Private _Ostern As Date ''' ''' Initialisiert die Feiertags-Klasse für das aktuelle Jahr ''' Public Sub New() _Year = Now.Year End Sub ''' ''' Initialisiert die Feiertags-Klasse für das angegebene Jahr ''' Public Sub New(ByVal Year As Integer) _Year = Year End Sub ''' ''' Gibt das Datum für den Ostersonntag zurück. ''' Public ReadOnly Property Ostersonntag() As Date Get If _Ostern.Ticks = 0 Then ' Datum des ersten Vollmondes nach Frühlingsanfang Dim a As Integer = _Year Mod 19 Dim b As Integer = _Year Mod 4 Dim c As Integer = _Year Mod 7 Dim M As Integer = Val(((8 * Val(_Year / 100) + 13) / 25) - 2) Dim s As Integer = Val(_Year / 100) - Val(_Year / 400) - 2 M = (15 + s - M) Mod 30 Dim N As Integer = (6 + s) Mod 7 Dim d As Integer = (M + 19 * a) Mod 30 If d = 29 Then d = 28 ElseIf d = 28 Then If (_Year Mod 19) > 10 Then d = 27 End If Dim e As Integer = (2 * b + 4 * c + 6 * d + N) Mod 7 ' Ostersonntag _Ostern = New DateTime(_Year, 3, 21).AddDays(d + e + 1) End If Return _Ostern End Get End Property ''' ''' Gibt das Datum für den Ostermontag zurück. ''' Public ReadOnly Property Ostermontag() As Date Get Return Ostersonntag.AddDays(1) End Get End Property ''' ''' Gibt das Datum für den BussUndBettag zurück. ''' Public ReadOnly Property BussUndBettag() As Date Get Dim i As Long Dim VierterAdvent As Date For i = 24 To 1 Step -1 If CDate(i & ".12." & _Year).ToString("ddd") = "So" Then VierterAdvent = CDate(i & ".12." & _Year).ToShortDateString Exit For End If Next i Dim ErsterAdvent As Date = VierterAdvent.AddDays(-21) ' DateAdd("d", -21, VierterAdvent) Return ErsterAdvent.AddDays(-11) ' DateAdd("d", -11, ErsterAdvent) 'BussUndBettag End Get End Property ''' ''' Gibt das Datum für den Karfreitag zurück. ''' Public ReadOnly Property Karfreitag() As Date Get Return Ostersonntag.AddDays(-2) End Get End Property ''' ''' Gibt das Datum für den Pfingstsonntag zurück. ''' Public ReadOnly Property Pfingstsonntag() As Date Get Return Ostersonntag.AddDays(49) End Get End Property ''' ''' Gibt das Datum für den Pfingsmontag zurück. ''' Public ReadOnly Property Pfingstmontag() As Date Get Return Ostersonntag.AddDays(50) End Get End Property ''' ''' Gibt das Datum für Christi-Himmelfahrt zurück. ''' Public ReadOnly Property Himmelfahrt() As Date Get Return Ostersonntag.AddDays(39) End Get End Property ''' ''' Gibt das Datum für Fronleichnam zurück. ''' Public ReadOnly Property Fronleichnam() As Date Get Return Ostersonntag.AddDays(60) End Get End Property ''' ''' Gibt das Datum für Aschermittwoch zurück. ''' Public ReadOnly Property Aschermittwoch() As Date Get Return Ostersonntag.AddDays(-46) End Get End Property Public Function isFeiertag(datum As Date, land As String) As Boolean If datum = CDate("01.01." & _Year) Then Return True If datum = CDate("06.01." & _Year) Then Return True If datum = CDate("15.08." & _Year) Then Return True If datum = CDate("01.11." & _Year) Then Return True If datum = CDate("25.12." & _Year) Then Return True If datum = CDate("26.12." & _Year) Then Return True If datum = Ostermontag Then Return True If datum = Ostersonntag Then Return True If datum = Himmelfahrt Then Return True If datum = Pfingstmontag Then Return True If datum = Pfingstsonntag Then Return True If datum = Fronleichnam Then Return True Select Case land Case "AT" If datum = CDate("26.10." & _Year) Then Return True If datum = CDate("08.12." & _Year) Then Return True If datum = CDate("01.05." & _Year) Then Return True 'Staatsfeiertag Case "DE" 'BAYERN If datum = CDate("03.10." & _Year) Then Return True ' Tag der Deutschen Einheit If datum = BussUndBettag Then Return True ' Buß- und Bettag '!!!!ABEWEICHEND If datum = CDate("08.08." & _Year) Then Return True ' Augsburger Friedensfest If datum = CDate("01.05." & _Year) Then Return True ' Maifeiertag If datum = Karfreitag Then Return True End Select Return False End Function End Class