计算复活节星期日






2.40/5 (4投票s)
2001 年 11 月 24 日

97288

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;
}
}
延伸阅读
玩得开心!
许可证
本文未附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论区联系作者。
作者可能使用的许可证列表可以在此处找到。