12 Απριλίου 2006

Υπολογισμός ημερομηνίας ορθόδοξου Πάσχα και κινητών εορτών

Ο παρακάτω αλγόριθμος υπολογίζει την ημερομηνία της Κυριακής του Πάσχα.
(Πρώτη Κυριακή μετά την πρώτη πανσέληνο της εαρινής ισημερίας)
Αφορά στο Γρηγοριανό ημερολόγιο και είναι το Πάσχα των ορθοδόξων και ισχύει για τα έτη από 1583 έως 4099.
Για υπολογισμό με άλλα ημερολόγια επισκεφθείτε
http://users.chariot.net.au/~gmarts/eastalg.htm

'Περνάμε σαν παράμετρο το έτος που θέλουμε να υπολογίσουμε το Πάσχα
Private Function GetEasterDate(ByVal Y As Integer)
Dim FirstDig, Remain19, temp, d, m As Integer
Dim tA, tB, tC, tD, tE As Integer
'Ισχύει για έτη από 1583 έως 4099
If (Y > 1583 Or Y > 4099) Then
System.Windows.Forms.MessageBox.Show("To Γρηγοριανό ημερολόγιο εφαρμόζεται μόνο για τα έτη από 1583 έως 4099","GetEasterDate Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Return nothing
End If

FirstDig = CType(Y \ 100, Integer) 'Τα δύο πρώτα ψηφία του έτους

' PFM (Paschal Full Moon )
' Αλγόριθμος υπολογισμού της πρώτης πανσελήνου της εαρινής ισημερίας
'Για λεπτομέρειες http://www.assa.org.au/edm.html#OrthCalculator

Remain19 = Y Mod 19
tA = ((225 - 11 * Remain19) Mod 30) + 21
'Εύρεση της επόμενης Κυριακής
tB = (tA - 19) Mod 7
tC = (40 - FirstDig)
Mod 7
temp = Y
Mod 100

tD = (temp + temp \ 4)

tE = ((20 - tB - tC - tD) Mod 7) + 1

d = tA + tE

'Μεταφορά 10 ημερών από το Γρηγοριανό ημερολόγιο
temp = 10
If Y > 1600 Then temp = temp + FirstDig - 16 - ((FirstDig - 16) \ 4)
d = d + temp
If d > 61 Then
d = d - 61
m = 5
'Μάϊος
ElseIf d > 31 Then
d = d - 31
m = 4
'Απρίλιος
Else
m = 3 'Μάρτιος
End If

Return New Date (Y, m, d)
End Function

Κλήση Function
GetEasterDate (2006)
Κινητές εορτές
Μπορούμε από την ημερομηνία του Πάσχα να υπολογίσουμε όλες τις κινητές εορτές
ΠΧ.
Τριώδιο 70 ημέρες πρίν
Καθαρά Δευτέρα 48 ημέρες πρίν

Σάββατος του Λαζάρου 8 ημέρες πρίν

Αγίων Πάντων 56 ημέρες μετά