Nézzük, milyen szabályok alakítják a húsvét aktuális dátumát: a niceai zsinat 325-ben határozta meg e napnak a dátumát úgy, hogy az a tavaszi napéjegyenlőség utáni első holdtöltét követő vasárnapra essen. Ha az első holdtölte éppen vasárnapra esik, akkor az azt követő vasárnapra kerül át az ünnep. A naptár szerint ez csak a március 22. és április 25. közé eső vasárnapok egyike lehet.
A húsvét napjának meghatározásakor a matematikai nehézség abból származik, hogy sem a Föld keringési ideje, sem pedig a két holdtölte közötti idő nem egész számú többszöröse a nap hosszának. A naptárkészítés alapelve az, hogy a tavaszi napéjegyenlőség március 21-ére essen. Ezt az 1582-ben bevezetett Gergely-féle naptár úgy oldja meg, hogy a négyévenkénti szökőévekből minden négy évszázadban hármat elhagy. Ez több mint három évszázadon át biztosítja a tavasz március 21-ei kezdetét, ellenben a húsvét időpontjának számítását nagyban megnehezíti.
Ezt jól tükrözi az alábbi algoritmus, mely egyetlen évszámból kiindulva képes egy TDateTime típus meghatározására, mely a húsvét adott évi dátumát adja.
Public Shared Function Execute(ByVal year As Integer) As DateTime
Dim G, I, J, C, H, L, M, D As Integer
G = year Mod 19
C = year / 100
H = (C - C / 4 - (8 * C + 13) / 25 + 19 * G + 15) Mod 30
I = H - H / 28 * (1 - H / 28 * (29 / (H + 1)) * ((21 - G) / 11))
J = (year + year / 4 + I + 2 - C + C / 4) Mod 7
L = I - J
M = 3 + (L + 40) / 44
D = L + 28 - 31 * (M / 4)
Dim E As New DateTime(year, M, D)
While CInt(E.DayOfWeek) + 1 > 1
E = E.AddDays(1)
End While
Return E
End Function 'Execute
A függvény felhasználása már jóval egyszerűbb feladat: paraméterként átadjuk a kérdéses évszámot, majd visszatérési értékként felhasználjuk a kapott dátumot tetszés szerint.
Private Sub button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles button1.Click
label1.Text = CalculateEaster.Execute(Convert.ToInt32(textBox1.Text)).ToShortDateString()
End Sub 'button1_Click