Skip to main content
Email Password   helpLost your password?

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 )
{
    // calculate easter sunday

    // [in]  wYear  - 4-digit year to calculate (but not before 1583)

    // [out] wMonth - month of easter sunday

    // [out] wDay   - day of easter sunday


    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);
    
    // jump to next month

    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.

You must Sign In to use this message board.
 
 
Per page   
 FirstPrevNext
GeneralThe algorithm is incorrect Pin
Sire404
5:42 22 Mar '05  
GeneralThere are better algorithms. Pin
Willzyba
4:22 22 Nov '04  
GeneralIt does not take into account all the Christians Pin
Alexandru Savescu
13:39 27 Nov '01  
GeneralJust what I was looking for! Pin
Matt Gullett
10:09 26 Nov '01  
GeneralDead link? Pin
edx
7:30 26 Nov '01  
Generalheheh Pin
Rui Lopes
1:56 25 Nov '01  
Generalunusual :-) Pin
Nish [BusterBoy]
21:09 24 Nov '01  


Last Updated 23 Nov 2001 | Advertise | Privacy | Terms of Use | Copyright © CodeProject, 1999-2009