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.
Hinweis
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: [ 2640 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Montag, 12. September 2011