Loading AI tools
来自维基百科,自由的百科全书
星期的計算是能够計算出某一指定日期是在一周中的哪一天的一类算法。多種數學算法均可計算出過去或未來某一指定日期,是屬於一周中的星期幾,包括判决日法则(Doomsday Rule),Babwani公式等,但其實這些算法皆基于类似的机制相互变化而来,只是透過不同規則取得相同結果。
算法的典型應用,是計算某人的出生日期或某重大事件的發生日期,是在一周中的哪一天。
差不多所有星期算法的基礎皆可歸納如下:
由以上可得知,使用同餘7表示在計算中可剔除7的倍數,如此可把7當作0、8當作1、9當作2、18當作4,如此類推。如果把星期日當作第0日,7日後(第7日)亦是星期日,而第18日則會與第4日相同,為星期日後的4天,即星期四。一些算法把所有加數先行計算,然後把7的倍數剔除,而其他算法則在每一步皆剔除7的倍數。兩種做法皆可取,第一種做法較適用於計算機及電腦算法中,其他則較適用於心算。熟悉这些计算方法之后,可在腦內計算出來。
把四个数加起来然后同余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
同周月是指那些第一天的星期数相同的月份。例如9月与12月是同周月,因为9月1日是星期几12月1日也必定是星期几。显然,只有两个月份之间相隔整数周,或恰好相隔7的倍数天时,这两个月才是同周月。比如在平年时,2月正好有28天,即2月与3月是同周月;而在闰年时,2月变成了29天,那么2月与3月就不是同周月了。下面是同周月的列表:
注意,5月与6月,不管是平年还是闰年,与其它任何月份都不是同周月。另外,在下面的月份查找表中,同周月由于开始于一周中的同一天,所以它们的数字(星期数)是相同的。
同周年类似于同周月,是指那些第一天的星期数相同的年份。每一年的第一天都有星期一到星期日7种可能,而闰年的2月29日会改变其后日期的星期数。所以,每一年的星期构成共有14种可能。(教会用于计算复活节日期的主日字母即共有14种表示法)
例如2023年是以星期日开始的平年,与2017年、2006年及1995年为同周年,而2027年是以星期五开始的平年,与2021年、2010年及1999年为同周年。
2020年是以星期三开始的闰年,与2014年同样开始于星期三,但与2015年同样结束于星期四;2024年是以星期一开始的闰年,与2018年同样开始于星期一,但与2019年同样结束于星期二;而2032年是以星期四开始的闰年,与2026年同样开始于星期四,但与2027年同样结束于星期五。
以下算法适用于公历。需要注意的是,算法中世纪、年、月的星期数都是指的该世纪、年、月第0天为星期几,这样的好处是在计算时只要直接将天数加上就可以了,而不必再减1。例如,1900年的第0天(即1899年12月31日)是星期天,还要加上1才是1900年第1天(即1月1日)的星期数,即星期一。
另一个需要注意的是,算法中每一步得到的数字,都是参照特定日期得到的相对星期数,即与特定参照日相差几个星期数。只有把所有这些数字相加,再根据已知的参照日才得到实际的星期数。
算法的基本步骤如下:
将上面所有步骤的相对星期数相加,再取同余7就是实际的星期数了。
如我们要计算1982年4月24日是星期几:
又一个例子,1783年9月18日是星期几:
再一个例子,2054年6月19日是星期几:
格里历 1752-1799 4 c mod4=1 1800-1899 2 c mod4=2 1900-1999 0 c mod4=3 2000-2099 6 c mod4=0 2100-2199 4 儒略历 0800-0899 3 c mod7=1 0900-0999 2 c mod7=2 1000-1099 1 c mod7=3 1100-1199 0 c mod7=4 1200-1299 6 c mod7=5 1300-1399 5 c mod7=6 1400-1499 4 c mod7=0 1500-1582 3
01 07 12 18 24 1 02 08 13 19 24 2 03 08 14 20 25 3 04 09 15 20 26 4 04 10 16 21 27 5 05 11 16 22 00 6 06 12 17 23 00 0 闰年1、2月份年份y用斜体
01月 0 02月 3 03月 3 04月 6 05月 1 06月 4 07月 6 08月 2 09月 5 10月 0 11月 3 12月 5
星期一 1 01 08 15 22 29 星期二 2 02 09 16 23 30 星期三 3 03 10 17 24 31 星期四 4 04 11 18 25 星期五 5 05 12 19 26 星期六 6 06 13 20 27 星期天 0 07 14 21 28
查星期:先找日和月的交叉数,然后在年(闰年1、2月份用斜体数字)行找到该数,对应到世纪行的数就是所求星期数。
日 期 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
08 | 09 | 10 | 11 | 12 | 13 | 14 | ||||||||||
15 | 16 | 17 | 18 | 19 | 20 | 21 | ||||||||||
22 | 23 | 24 | 25 | 26 | 27 | 28 | ||||||||||
月 份 | 29 | 30 | 31 | 年份 modulo 28 | 格里历世纪 mod 4 | 儒略历世纪 mod 7 | ||||||||||
1 | 10一 | 二 | 三 | 四 | 五 | 六 | 日 | 01 | 07 | 12 | 18 | 24 | 1600 | 20000 | 0500 | 12005 |
4 | 7日 | 一 | 二 | 三 | 四 | 五 | 六 | 02 | 08 | 13 | 19 | 24 | 0600 | 13006 | ||
9 | 12六 | 日 | 一 | 二 | 三 | 四 | 五 | 03 | 08 | 14 | 20 | 25 | 1700 | 21001 | 0700 | 14000 |
6 | 五 | 六 | 日 | 一 | 二 | 三 | 四 | 04 | 09 | 15 | 20 | 26 | 0800 | 15001 | ||
2 | 3 11四 | 五 | 六 | 日 | 一 | 二 | 三 | 04 | 10 | 16 | 21 | 27 | 1800 | 22002 | 0900 | 02002 |
8 | 三 | 四 | 五 | 六 | 日 | 一 | 二 | 05 | 11 | 16 | 22 | 00 | 1000 | 03003 | ||
5 | 二 | 三 | 四 | 五 | 六 | 日 | 一 | 06 | 12 | 17 | 23 | 00 | 1900 | 23003 | 1100 | 04004 |
查主日字母:世纪行“日”所在的列为主日字母世纪列,年份行对应到该列的数字就是该年的主日字母,一为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(星期四)。
心算时为方便记忆,一个简单的方法就是把一年的起始日想象成3月1日而不是1月1日(就像古罗马历一样),这样闰年的2月29日就变成了每年的最后一天,而不是在一年的中间。这样,计算星期时的标准第0日就变成了2月的最后一天。下面就会看到,这样计算时很方便记忆。
这些日子在判决日法则中被称作判决日,与心算的过程类似,可帮助计算。
另一好处是1月和2月的计算也相对简单了,只要记住1月9日(或1月16日)和2月6日与上一年的判决日(2月最后一天)星期数相同就可以了。下面列出了每个月中便于记忆的判决日:
月 +5 月 -5 月 +10 月 4月4日 9月5日 2月6日 6月6日 11月7日 8月8日 1月9日 3月7日 10月10日 5月9日 12月12日 7月11日
所以只要确定每一年的第0日(2月最后一天)是星期几,参照上方列出的具有相同星期数的判决日,即可快速推算某天是星期几。
确定每一年的第0日是星期几很简单:
比如我们要计算2017年6月3日是星期几。首先想到2000年第0日是星期二,那么12年后的2012年是星期三,2013年是星期四,2014年是星期五,2015年是星期六,2016年是星期一(因为是闰年),2017年第0日就是星期二。然后想到6月的判决日6月6日也是星期二,那么3天前的6月3日就是星期六。
格里历:
儒略历:
计算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日。
2004年11月,巴布瓦尼(Babwani)在伦敦数学学报(Mathematical Gazette)上发表了一种新的星期计算法。他的这种新方法相对于其它方法更简单,而且不仅可用于计算星期数,更可以在星期、日期、月份、年份中已知任意三者时,计算剩下的未知者。
公式:w = (⌊5y/4⌋ + m + d - 2(c mod 4) + 7) mod 7
其中w=1=星期日 c、y、和d=其它算法 m=月份星期表 ⌊5y/4⌋=其它公式的y+⌊y/4⌋ -2(c mod 4)+7=1+6-2(c mod 4)=1+其它算法的2(3-(c mod 4),所以1代表的不是星期一而是星期日。
在蔡勒算法中,每一年被假设从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後的餘數)
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.