为方便口算, 式中的[13 * (M+1) / 5]也往往写成[26 * (M+1) / 10]。 现在仍然让我们来算 2004 年 5 月 1 日的星期,显然 C=20,y=4,M=5,d=1,代入蔡勒 公式,有: W = [20/4] - 40 + 4 + 1 + [13 * (5+1) / 5] + 1 - 1 = -15. 注意负数不能按习惯的余数的概念求余数,只能按数论中的余数的定义求余。为了方便 计算,我们可以给它加上一个 7 的整数倍,使它变为一个正数,比如加上 70,得到 55。 再除以 7,余 6,说明这一天是星期六。这和实际是一致的,也和公式(2)计算所得的结 果一致。 最后需要说明的是,上面的公式都是基于公历(格里高利历)的置闰规则来考虑 的。对于儒略历,蔡勒也推出了相应的公式是: W = 5 - C + y + [y/4] + [13 * (M+1) / 5] + d - 1. (13) (11) (10) ======================================== (2005-10-20 22:25:00) --------(4575252) 计算任何一天是星期几的几种算法 近日在论坛上看到有人在问星期算法,特别整理了一下,这些算法都是从网上搜索而来,算法的实现 是我在项目中写的。希望对大家有所帮助。 一:常用公式 W = [Y-1] + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D Y 是年份数,D 是这一天在这一年中的累积天数,也就是这一天在这一年中是第几天。 二:蔡勒(Zeller)公式 w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 公式中的符号含义如下,w:星期;c:世纪;y:年(两位数) m:月(m 大于等于 3,小于等于 ; 14,即在蔡勒公式中,某年的 1、2 月要看作上一年的 13、14 月来计算,比如 2003 年 1 月 1 日要看作 2002 年的 13 月 1 日来计算) ;d:日;[ ]代表取整,即只要整数部分。 相比于通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。 5 三:对蔡勒(Zeller)公式的改进 作者:冯思琮 相比于另外一个通用通用计算公式而言,蔡勒(Zeller)公式大大降低了计算的复杂度。不过,笔者 给出的通用计算公式似乎更加简洁(包括运算过程) 。现将公式列于其下: W=[y/4]+r (y/7)-2r(c/4)+m’+d 公式中的符号含义如下,r ( )代表取余,即只要余数部分;m’是 m 的修正数,现给出 1 至 12 月的修 正数 1’至 12’如下: ,10’ (1’ )=6; ,3’ (2’ ,11’ )=2; ,7’ (4’ )=5;5’=0;6’=3;8’=1; , (9’ 12’ )=4(注意:在笔者给出的公式中,y 为润年时 1’=5;2’=1) 。其他符号与蔡勒(Zeller)公式中的含 义相同。 四:基姆拉尔森计算公式 这个公式名称是我给命名的,哈哈希望大家不要见怪。 W= (d+2*m+3*(m+1)/5+y+y/4-y/100+y/400) mod 7 在公式中 d 表示日期中的日数,m 表示月份数,y 表示年数。 注意:在公式中有个与其他公式不同的地方: 把一月和二月看成是上一年的十三月和十四月,例:如果是 2004-1-10 则换算成:2003-13-10 来代入 公式计算。 6