理解这段代码的意思有一个前提:year是从公元元年开始计算的,而公元元年的第一天是星期日。
所以上述这个式子的意思就是:
year-1这么多年一共有多少天呢? 假设每年都是平年,那么一共有: (year-1)*365天
然后加上year-1年中闰年的个数就行了(多一个闰年就多加一天)
那么闰年的计算方法是:
能被4整除: +(year-1)/4
且不能被100整除: -(year-1)/100
或者能被400整除的也是闰年: +(year-1)/400
最后得到了year-1年一共是多少天,然后对7取模,如果余数是0,就是星期六(一周的最后一天),余数是1就是星期日(一周的第一天)
再详细说下:余数是0的情况就是说:year-1这么多年的天数刚好能够分配给整数个星期,即刚好能被7整除。所以作为12月31日这一天,就应该是最后一个星期的最后一天,那么应该是周六。
其余情况可以类推了。
参考公式:
蔡勒(Zeller)公式:是一个计算星期的公式。
随便给一个日期,就能用这个公式推算出是星期几。蔡勒公式如下:
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1
公式中的符号含义如下:
w:星期; w对7取模得:0-星期日,1-星期一,2-星期二,3-星期三,4-星期四,5-星期五,6-星期六
c:世纪(前两位数)
y:年(后两位数)
m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算),y-1,m+12
d:日
[ ]代表取整,即只要整数部分。
例如:2012年01月22日,星期几?
=2011年13月22日
W=11+int(11/4)+int(20/4)-2*20+int(26*(12+1+1)/10)+22-1
=11+2+5-40+36+22-1
声明:这是别人写的。不是我写的。
=18-40+58-1=35
35mod7=0,星期日