Introduction
Looking through old Pascal sources I found an algorithm to calculate Easter Sunday. I reinterpreted it to C++ and packed it into a small
MFC dialog application.
The sample calculates Easter from 1970 to 2037. Responsible for the limitation is the function
mktime, used to calculate the offset to ash. Basically GetEasterSunday
is able to
calculate Easter from 1583 (beginning of Gregorian calendar) to 2499 (end of correction values).
Ash Wednesday is 46 days before Easter Sunday.
void
CEasterDlg::GetEasterSunday( WORD wYear, WORD& wMonth, WORD& wDay )
{
WORD wCorrection = 0;
if( wYear < 1700 ) wCorrection = 4;
else if( wYear < 1800 ) wCorrection = 5;
else if( wYear < 1900 ) wCorrection = 6;
else if( wYear < 2100 ) wCorrection = 0;
else if( wYear < 2200 ) wCorrection = 1;
else if( wYear < 2300 ) wCorrection = 2;
else if( wYear < 2500 ) wCorrection = 3;
wDay = (19 * (wYear % 19) + 24) % 30;
wDay = 22 + wDay + ((2 * (wYear % 4) + 4 * (wYear % 7) + 6 * wDay + 5 + wCorrection) % 7);
if( wDay > 31 )
{
wMonth = 4;
wDay -= 31;
}
else
{
wMonth = 3;
}
}
Further reading:
http://aa.usno.navy.mil/data/docs/easter.html
JavaScript that computes easter sunday.
http://www.hourworld.com/easter.htm
More algorithms how to calculate.
Have fun.
This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.
A list of licenses authors might use can be found here