蔡勒(Zeller)公式
- 公式:w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中符号含义如下,w:星期;y:年份后两位;c:世纪-1;m:月份数(m定义域是[3,14],因此蔡勒公式中某年的1、2月应看做上一年的13、14月份,此时年份和世纪作相应调整);d:当前日期数
算出的w%7,余数是几则为星期几,余数为0即星期日。 - 需注意的是,以上公式只适合于1582年10月15日之后的情形(当时的罗马教皇将恺撒大帝制订的儒略历修改成格里历,即今天使用的公历)。
- 推导过程:如何计算某一天是星期几?(Zeller公式)
- 代码
int zeller(int y,int m,int d)
{
if (m<=2) y-=1,m+=12;
int c=y/100; y-=c*100;
int wd = (y+y/4)+(c/4-2*c)+(26*(m+1)/10)+d+6;
return wd%7;
}
心算法
- 公式:w=(y+m+d)%7
(1)看这一年的第一天是星期几就为几,如2005年1月1日是星期六就为6,2006年1月1日是星期日就为7,2007年1月1日是星期一就为1……如果这一年是闰年,3月以后的代码需要加1,如2008年1月1日是星期二,1月到2月的年份代码为2,3月到12月的年份代码就为3。还可以根据周期进行推算,因为年份的代码是每7个数字为一个周期。
下列一组年份的代码可供记忆及推算:
2007=1,
2008的1~2=2,2008的3~12=3,
2009=4,
2010=5,
2011=6,
2012的1~2=7,2012的3~12=1,
2013=2……
(2)m:熟记歌谣“鹿儿来,五岭山,虎一撕,鹿儿死”,即12个月份依次对应6 2 2 5 0 3 5 1 4 6 2 4
(3)d:即当前日期 - 推导过程:心算,怎么快速知道某年的1月1日是星期几?