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.
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;
wMonth = 3;
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.