
最常见的公式:
W = [Y-1] + [(Y-1)/4] – [(Y-1)/100] + [(Y-1)/400] + D
Y是年份数,D是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。
最好用的是蔡勒公式:
W = [C/4] – 2C + y + [y/4] + [13 * (M+1) / 5] + d – 1
C是世纪数减一,y是年份后两位,M是月份,d是日数。1月和2月要按上一年的13月和 14月来算,这时C和y均按上一年取值。
两个公式中的[…]均指只取计算结果的整数部分。算出来的W除以7,余数是几就 是星期几。如果余数是0,则为星期日。
懵了,看不懂是吧,下面记住几个数字就简单了!

列如2003年5月15日是星期几?
第一用一张纸把下面的数字记下来:
1 2 3 4 5 6 7 8 9 10 11 12
5 1 1 4 6 2 4 0 3 5 1 3
记下来了吗?上面的一行是月份,下面的一行是代码。
只要记下来就可以知道是星期几了。
拿2005年5月15日来打个比方说:5月的代号是6,用代号+日期也就是6+15=21 再用得出的数来除以7,商几不必管,看余数,21除以7余0,所以这一天就是星期日。简单吧,如果代号+日期小于7的话,是几就是星期几。列如2005年1月1日,1月的代号是5,5+1=6,所以这天就是星期六。
按此法可推算出任何一年的星期来。就是看当月的1号是星期几,然后减1,就是代码。
还有一种方法,就是在今年的基础上每月的代码+1就是明年的。
如:2005年的代码是:5 1 1 4 6 2 4 0 3 5 1 3
那么2006年的代码是:6 2 2 5 0 3 5 1 4 6 2 4
而且所有的代码都是循环的,1995年的代码和2006年的代码是一样的。只要背下11年的所有代码,自己就相当于是个活万年历了。



666,好简单!