Feedback

Berechnung des Datums des Ostersonntags

Sprache: VB

Diese Funktion berechnet zu einem gegebenen Jahr (year) das Datum des Ostersonntags und gibt es als DateTime zurück. Daraus können dann alle anderen von Ostern abhängigen Feiertage berechnet werden: Rosenmontag: -48 Tage Faschingsdienstag: -47 Tage Aschermittwoch: -46 Tage Gründonnerstag: -3 Tage Karfreitag: -2 Tage Karsamstag: -1 Tag Ostermontag: +1 Tag Christi Himmelfahrt: + 39 Tage Pfingstsonntag: +49 Tage Pfingstmontag: +50 Tage Fronleichnam: +60 Tage
  ''' <summary>
  ''' caclulates date of easter sunday in given year
  ''' </summary>
  ''' <param name="year">year date has to be in</param>
  ''' <returns>date of easter sunday</returns>
  Public Shared Function Easter(ByVal year As Integer) As DateTime
    Dim _month As Integer
    Dim _day As Integer
    Dim _moon As Integer
    Dim _epact As Integer
    Dim _sunday As Integer
    Dim _gold As Integer
    Dim _century As Integer
    Dim _corx As Integer
    Dim _corz As Integer
    ' The Golden Number of the year in the 19 year Metonic Cycle: 
    _gold = (year Mod 19) + 1
    ' Calculate the Century:
    _century = (year  100) + 1
    ' Number of years in which leap year was dropped in order
    ' to keep in step with the sun:
    _corx = (3 * _century)  4 - 12
    ' Special correction to syncronize Easter with moon's orbit:
    _corz = (8 * _century + 5)  25 - 5
    ' Find Sunday:
    _sunday = (5 * year)  4 - _corx - 10
    ' ^ evtl. long To prevent overflow at year 6554
    ' Set Epact - specifies occurrence of full moon:
    _epact = (11 * _gold + 20 + _corz - _corx) Mod 30
    If _epact < 0 Then
      _epact += 30
    End If
    If (((_epact = 25) AndAlso (_gold > 11)) OrElse (_epact = 24)) Then
      _epact += 1
    End If
    ' Find Full Moon:
    _moon = 44 - _epact
    If _moon < 21 Then
      _moon += 30
    End If
    ' Advance to Sunday:
    _moon += 7 - ((_sunday + _moon) Mod 7)
    If (_moon > 31) Then
      _month = 4
      _day = _moon - 31
    Else
      _month = 3
      _day = _moon
    End If
    Return New DateTime(year, _month, _day)
  End Function

  ''' <summary>
  ''' caclulates date of easter sunday in given year
  ''' </summary>
  ''' <param name="year">year date has to be in</param>
  ''' <returns>date of easter sunday</returns>
  Public Shared Function Easter(ByVal year As Integer) As DateTime
    Dim _month As Integer
    Dim _day As Integer
    Dim _moon As Integer
    Dim _epact As Integer
    Dim _sunday As Integer
    Dim _gold As Integer
    Dim _century As Integer
    Dim _corx As Integer
    Dim _corz As Integer
    ' The Golden Number of the year in the 19 year Metonic Cycle: 
    _gold = (year Mod 19) + 1
    ' Calculate the Century:
    _century = (year  100) + 1
    ' Number of years in which leap year was dropped in order
    ' to keep in step with the sun:
    _corx = (3 * _century)  4 - 12
    ' Special correction to syncronize Easter with moon's orbit:
    _corz = (8 * _century + 5)  25 - 5
    ' Find Sunday:
    _sunday = (5 * year)  4 - _corx - 10
    ' ^ evtl. long To prevent overflow at year 6554
    ' Set Epact - specifies occurrence of full moon:
    _epact = (11 * _gold + 20 + _corz - _corx) Mod 30
    If _epact < 0 Then
      _epact += 30
    End If
    If (((_epact = 25) AndAlso (_gold > 11)) OrElse (_epact = 24)) Then
      _epact += 1
    End If
    ' Find Full Moon:
    _moon = 44 - _epact
    If _moon < 21 Then
      _moon += 30
    End If
    ' Advance to Sunday:
    _moon += 7 - ((_sunday + _moon) Mod 7)
    If (_moon > 31) Then
      _month = 4
      _day = _moon - 31
    Else
      _month = 3
      _day = _moon
    End If
    Return New DateTime(year, _month, _day)
  End Function