![]() |
Tipp 0298
|
Gesetzliche Feiertage ermitteln
|
 |
|
Autor/Einsender: Datum: |
|
Detlev Schubert 27.12.2002 |
|
Entwicklungsumgebung: |
|
VB 5 |
|
|
Für alle Anwendungen, die mit Terminen arbeiten, wie z.B. ein Terminkalender, spielt die Berechnung von Feiertagen eine große Rolle. Allerdings ist eine Ermittlung der beweglichen Feiertage wie Karfreitag oder Pfingsten nicht einfach, da sie nicht wie Neujahr immer auf das gleiche Datum fallen.
|
Nun richten sich aber alle beweglichen Feiertage nach dem Osterfest, das allerdings jedes Jahr auf ein anderes Datum fällt, und zwar auf den Sonntag nach dem ersten Vollmond im Anschluss an die März-Tagundnachtgleiche.
|
Hier ist es dem Mathematiker Carl Friedrich Gauß zu verdanken, der einen speziellen Algorithmus entwickelt hat, der in unserem Tipp zur Anwendung kommt, der zwischen den Jahren 1901 und 2078 korrekte Ergebnisse liefert.
|
|
|
In diesem Tipp werden nur die bundeseinheitlichen gesetzlichen Feiertage ermittelt!
|
|
|
Option Explicit
Private Sub Form_Load()
With MonthView1
.Day = Day(Now)
.Month = Month(Now)
.Year = Year(Now)
End With
End Sub
Private Sub MonthView1_DateClick(ByVal DateClicked As Date)
Label1.Caption = " " & IstFeiertag(DateClicked)
End Sub
Private Sub MonthView1_SelChange(ByVal StartDate As Date, _
ByVal EndDate As Date, Cancel As Boolean)
MonthView1_DateClick StartDate
End Sub
Private Function IstFeiertag(Datum As Date) As String
Dim Osterdatum As Date
If Day(Datum) = 1 And Month(Datum) = 1 Then
IstFeiertag = "Neujahr"
ElseIf Day(Datum) = 1 And Month(Datum) = 5 Then
IstFeiertag = "Maifeiertag"
ElseIf Day(Datum) = 3 And Month(Datum) = 10 Then
IstFeiertag = "Tag der Deutschen Einheit"
ElseIf Day(Datum) = 25 And Month(Datum) = 12 Then
IstFeiertag = "1. Weihnachtstag"
ElseIf Day(Datum) = 26 And Month(Datum) = 12 Then
IstFeiertag = "2. Weihnachtstag"
Else
Osterdatum = HolOsterdatum(Year(Datum))
If Datum = Osterdatum - 2 Then
IstFeiertag = "Karfreitag"
ElseIf Datum = Osterdatum Then
IstFeiertag = "Ostersonntag"
ElseIf Datum = Osterdatum + 1 Then
IstFeiertag = "Ostermontag"
ElseIf Datum = Osterdatum + 39 Then
IstFeiertag = "Christi Himmelfahrt"
ElseIf Datum = Osterdatum + 49 Then
IstFeiertag = "Pfingstsonntag"
ElseIf Datum = Osterdatum + 50 Then
IstFeiertag = "Pfingstmontag"
End If
End If
End Function
Private Function HolOsterdatum(Jahr As Integer) As Date
Dim a As Integer, b As Integer, c As Integer
Dim d As Integer, e As Integer
Dim Tag As Integer, Monat As Integer
a = Jahr Mod 19
b = Jahr Mod 4
c = Jahr Mod 7
d = (19 * a + 24) Mod 30
e = (2 * b + 4 * c + 6 * d + 5) Mod 7
Tag = 22 + d + e
Monat = 3
If Tag > 31 Then
Tag = d + e - 9
Monat = 4
ElseIf Tag = 26 And Monat = 4 Then
Tag = 19
ElseIf Tag = 25 And Monat = 4 And d = 28 And e = 6 And a > 10 Then
Tag = 18
End If
HolOsterdatum = DateSerial(Jahr, Monat, Tag)
End Function
|
|
|
Windows-Version |
95 |
 |
|
98/SE |
 |
|
ME |
 |
|
NT |
 |
|
2000 |
 |
|
XP |
 |
|
Vista |
 |
|
Win
7 |
 |
|
|
VB-Version |
VBA 5 |
 |
|
VBA 6 |
 |
|
VB 4/16 |
 |
|
VB 4/32 |
 |
|
VB 5 |
 |
|
VB 6 |
 |
|
|
|
Download (3,4 kB)
|
Downloads bisher: [ 2760 ]
|
|
|