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
Have fun!
License
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.