65.9K
CodeProject 正在变化。 阅读更多。
Home

计算复活节星期日

starIconstarIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIcon

2.40/5 (4投票s)

2001 年 11 月 24 日

viewsIcon

97288

downloadIcon

549

如何找到复活节星期日和圣灰星期三

引言

在浏览旧的 Pascal 源代码时,我发现了一个计算复活节星期日的算法。我将其重新解释为 C++ 并将其打包成一个小的 MFC 对话框应用程序。

该示例计算 1970 年到 2037 年的复活节。限制的原因是用于计算灰烬星期三偏移量的函数 mktime。基本上,GetEasterSunday 能够从 1583 年(格里高利历开始)到 2499 年(修正值结束)计算复活节。

灰烬星期三是复活节星期日之前的 46 天。

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;
    }
}

延伸阅读

玩得开心!

许可证

本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。

作者可能使用的许可证列表可以在此处找到。

© . All rights reserved.