星期的計算

title: 简介.
content: 差不多所有星期算法的基础皆可归纳如下:  由以上可得知,使用同余7表示在计算中可剔除7的倍数,如此可把7当作0、8当作1、9当作2、18当作4,如此类推。如果把星期日当作第0日,7日后(第7日)亦是星期日,而第1,8日则会与第4日相同,为星期日后的4天,即星期四。一些算法把所有加数先行计算,然后把7的倍数剔除,而其他算法则在每一步皆剔除7的倍数。两种做法皆可取,第一种做法较适用于计算机及电脑算法中,其他则较适用于心算。熟悉这些计算方法之后,可在脑内计算出来。
title: 简单的方法.
content: 把四个数加起来然后同余7就是所求的星期数。这四个数分别是:  C:2(3-(c mod4))(格里历)、(4-c)mod7(儒略历)或查世纪星期表  Y:(y mod28+[y mod28/4])mod7(闰年1、2月份Y-1)或查年份星期表  M:((3.4+(m-3)mod12×2.6)mod7(1、2月份M-1)或查月份星期表  D:d mod7、或查日期星期表  就是说——W=(C+Y+M+D)mod7  (6+3+5+3)mod7=3,即该日是星期三,其中c=20、y=8、m=12、d=10  (6+2+3+3)mod7=0,即该日是星期日,其中c=20、y=8、m=2、d=10  (2+3+2+1)mod7=1,即该日是星期一,其中c=18、y=42、m=8、d=29
title: 有用的概念.
title: 同周月.
content: 同周月是指那些第一天的星期数相同的月份。例如9月与12月是同周月,因为9月1日是星期几12月1日也必定是星期几。显然,只有两个月份之间相隔整数周,或恰好相隔7的倍数天时,这两个月才是同周月。比如在平年时,2月正好有28天,即2月与3月是同周月;而在闰年时,2月变成了29天,那么2月与3月就不是同周月了。下面是同周月的列表:  注意,5月与6月,不管是平年还是闰年,与其它任何月份都不是同周月。另外,在下面的月份查找表中,同周月由于开始于一周中的同一天,所以它们的数字(星期数)是相同的。
title: 同周年.
content: 同周年类似于同周月,是指那些第一天的星期数相同的年份。每一年的第一天都有星期一到星期日7种可能,而闰年的2月29日会改变其后日期的星期数。所以,每一年的星期构成共有14种可能。(教会用于计算复活节日期的主日文字即共有14种表示法)  例如2003年是以星期三开始的平年,与1997年为同周年;2004年是以星期四开始的闰年,与1998年同样开始于星期四,但与1999年同样结束于星期五。
title: 算法.
content: 以下算法适用于公历。需要注意的是,算法中世纪、年、月的星期数都是指的该世纪、年、月第0天为星期几,这样的好处是在计算时只要直接将天数加上就可以了,而不必再减1。例如,1900年的第0天(即1899年12月31日)是星期天,还要加上1才是1900年第1天(即1月1日)的星期数,即星期一。  另一个需要注意的是,算法中每一步得到的数字,都是参照特定日期得到的相对星期数,即与特定参照日相差几个星期数。只有把所有这些数字相加,再根据已知的参照日才得到实际的星期数。  算法的基本步骤如下: 将上面所有步骤的相对星期数相加,再取同余7就是实际的星期数了。
title: 例子.
content: 如我们要计算1982年4月24日是星期几:  又一个例子,1783年9月18日是星期几:  再一个例子,2054年6月19日是星期几:
title: 世纪星期表.
content: 格里历
title: 年份星期表.
content: 01 07 12 18 "24" 1
title: 月份星期表.
content: 01月 0
title: 日期星期表.
content: 星期一 1 01 08 15 22 29
title: 表格法.
content: 查星期:先找日和月的交叉数,然后在年(闰年1、2月份用斜体数字)行找到该数,对应到世纪行的数就是所求星期数。  查主日字母:世纪行“日”所在的列为主日字母世纪列,年份行对应到该列的数字就是该年的主日字母,一为A、二为B、三为C、四为D、五为E、六为F、日为G。  查判决日(Doomsday)星期数:年份行的“三”对应到世纪行的数就是Doomsday。  此外,主日字母(DL)和判决日(DD)存在着这样的关系:DL + DD = C(3)。如2013年的主日字母是F,那判决日的星期数DD = 3(C)- 6(F)mod 7 = 4(星期四)。
title: 心算法.
content: 心算时为方便记忆,一个简单的方法就是把一年的起始日想象成3月1日而不是1月1日(就像古罗马历一样),这样闰年的2月29日就变成了每年的最后一天,而不是在一年的中间。这样,计算星期时的标准第0日就变成了2月的最后一天。下面就会看到,这样计算时很方便记忆。
title: 判决日.
content: 这些日子在判决日法则中被称作判决日,与心算的过程类似,可帮助计算。  另一好处是1月和2月的计算也相对简单了,只要记住1月9日(或1月16日)和2月6日与上一年的判决日(2月最后一天)星期数相同就可以了。下面列出了每个月中便于记忆的判决日: </code>  所以只要确定每一年的第0日(2月最后一天)是星期几,参照上方列出的具有相同星期数的判决日,即可快速推算某天是星期几。
title: 年数的计算.
content: 确定每一年的第0日是星期几很简单:
title: 例子.
content: 比如我们要计算2017年6月3日是星期几。首先想到2000年第0日是星期二,那么12年后的2012年是星期三,2013年是星期四,2014年是星期五,2015年是星期六,2016年是星期一(因为是闰年),2017年第0日就是星期二。然后想到6月的判决日6月6日也是星期二,那么3天前的6月3日就是星期六。
title: 高斯公式.
content: 格里历:formula_1 儒略历:formula_2
title: 例子.
content: 计算2000年1月1日的星期,这一日期应视为1999年的11月1日。 计算2000年12月31日的星期,这一日期应视为该年的10月31日。 计算1777年4月30日的星期,这一日期应视为该年的2月30日。 计算1582年10月4日的星期,这一日期应视为该年的8月4日。 计算BC1(0)年1月1日的星期,这一日期应视为前一年的11月1日。
title: Babwani公式.
content: 2004年11月,巴布瓦尼(Babwani)在伦敦数学学报(Mathematical Gazette)上发表了一种新的星期计算法。他的这种新方法相对于其它方法更简单,而且不仅可用于计算星期数,更可以在星期、日期、月份、年份中已知任意三者时,计算剩下的未知者。  公式:w = (⌊5y/4⌋ + m + d - 2(c mod 4) + 7) mod 7
title: 蔡勒公式.
content: 在蔡勒算法中,每一年被假设从3月开始,月份标号从3(3月)到14(二月),即1995年1月被认为是1994年13月。具体的算法是这样的: 其中w代表星期  c代表世纪数减1(年份前两位数)  y代表年(两位数)  m代表月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算)  d代表日  [ ]称作高斯符号,代表取整,即只要整数部分。  mod代表同余(这里代表括号里除以7后的余数)
title: 主日字母.
content: 每一年的星期数也可以根据主日字母确定。基督教教历上常用A-G七个字母来标示某一年的星期日(主日)是在第几天,如1月3日为星期日,那么该年的主日字母就是C。该年的主日字母确定了,那么每一天就按顺序被分配给相应的字母。此一方法据说最早古罗马人就有使用,后来常用于基督教上确定复活节日期的一种计算办法。在这一系统中,闰年的2月29日没有主日字母,这就使得2月29日之后的星期日与此前的星期日的主日字母不一致,所以闰年的主日字母都有两个。

Summary: 星期的计算是能够计算出某一指定日期是在一周中的哪一天的一类算法。多种数学算法均可计算出过去或未来某一指定日期,是属于一周中的星期几,包括(Doomsday Rule),Babwani公式等,但其实这些算法皆基于类似的机制相互变化而来,只是透过不同规则取得相同结果。