
公元月日相关的几个话题.docx
9页元年 1 月 1 日是星期几、干支为何,其公式是?这天到底发生了什么?公历元年 1 月 1 日是星期几的问题,网上的回答莫衷一是,有说周一、周 五、周六的等等,以回答周一的居多,就是少有人回答是周日,更没有人给出 有说服力的证明干支为何,几乎没人问为转嫁对夏日酷热的注意,闲人就 说道一下相关的问题,以更新我那老不更新的 空间要准确回答这个问题,必须弄清公历(也称格里高利历或儒略历)于元年 (不存在公元 0 年,元年即 1 年)之后的修改和纠错情况:1、儒略历从公元前 45 年 1 月 1 日(罗马纪元 709 年 11 月 1 日)施行 1582 年 10 月 15 日以前的置闰方法是每四年置一闰,即每 400 年置 100 闰年 长和现在一样,平年 2 月 28 天,全年 365 天;闰年 2 月为 29 天,全年 366 天 大概在前 9 年以后,为拍奥古斯都大帝的马屁,罗马元老院调整了各月的天数, 使之成为现在这个样子此后儒略历的月序和各月的天数都没再作变更,沿用 至今1582 年 10 月 15 日之后,每 400 年 97 闰,即:能被 4 整除的年份和能被 400 整除的年份均置闰,但能被 100 整除不能被 400 整除年份不置闰。
如, 1700、1800、1900 年为平年,2000 年为闰年2、公元 4 年没有置闰,该年 2 月仍然为 28 天前 45 年--前 9 年之间, 罗马掌管历法的大祭司把恺撒大帝改历令上的“每隔三年置一闰”错解成“每 三年置一闰” 为纠正此错,前 9 年,奥古斯都大帝下令从前 8 年至 4 年停止置 闰,即前 5 年、前 1 年和 4 年仍是平年,以后又恢复为每四年一闰(前 41 年应 为第 1 个闰年,因为前 45 年 1 月 1 日到前 42 年 12 月 31 日满四年整,故应在 前 41 年 2 月置闰,实际上前 42 年被置为闰年前 9 年既是实际的闰年,也应 为四年一闰的闰年前 45 年~前 9 年期间共 36 年,本应置 9 闰,实际闰了 12 次) 3、儒略历年长为 365.25 天,而回归年更接近 365.2422 天,因此约 128 年 就误差 1 天比如,325 年的春分在 3 月 21 日,而 1583 年的春分却是3月 11 日,整整相差了 10 天基督教会于 325 年规定耶稣复活节应在春分之后第一次 月圆后的第一个星期日,由于春分已相差 10 天之多,耶稣究竟在哪一天“复活” 的,也成了问题。
因此,罗马教皇格里高利十三世,于 1582 年采用意大利医生 里利奥的方案,将 1582 年 10 月 5 日到 14 日之间的 10 天宣布撤销,继 10 月4 日之后为 10 月 15 日,原有星期不变,并执行新的置闰规则此后这一历法没 再作修改,沿用至今由前所述可知, 1582 年前后,除了置闰规则不同外, 4 年 2 月 29 日和 1582 年 10 月 5 日至 14 日在公历上根本没存在过掌握了这些知识,剩下的就 是简单的运算问题了网上流传的可推算干支和星期的公式,大多只适用于 1582 年 10 月 15 日之 后大概很少有人清楚这一点,所以用“W= (y-1)+[(y-1)/4]-[(y-1)/100]+[(y-1)/400]+d” 推得元年 1 月 1 日是星期一这也是网上普遍认为元年 1 月 1 日是星期一的原因用 w 除以 7,余几就是星期几y 表示公元年份,d 表示所求之日在这一年 中是第几天,如 3 月 1 日在平年里是第 31+28+1=60 天,而 3 月 1 日在闰年里是 第 31+29+1=61 天[.]表示取整运算,计算出来的结果是不大于方括号里面的数 的最大整数,如[3.1]=3,[-1.2]=-2,[6]=6。
下面用最笨的但也是最直观的方法来计算元年 1 月 1 日是星期几:查历书可知:2013 年 1 月 6 日星期日星期日元年 1 月 1 日--1582 年 10 月 4 日的天数=1581×365+[1581÷4](取整数, 得 395 闰)-1(公元 4 年没闰)+277(1582 年元旦至 10 月 4 日天数) =5777361582 年 10 月 15 日--1600 年 12 月 31 日的天数=78+(18×365+5 闰)=66531601 年 1 月 1 日--2013 年 1 月 6 日星期日星期日的天数=412×365+100 闰 +6(2013 年的 6 天)=150486三项之和=577736+6653+150486=734875 734875÷7 =104982+1/7 即余数=1 注意了:2013 年 1 月 6 日是星期日,从星期日、星期六、星期五……星期 一、星期日……这样倒排、倒推至元年 1 月 1 日,余数为 1,说明元年 1 月 1 日处在倒排的第一个位置(顺排则是第七位) ,正是星期日,而不是星期一 如果以上所述历法知识没有遗漏天数、时日的话,则可以肯定元年元年 1 月月 1 日是星期日。
日是星期日相关话题相关话题 1::公历日期的星期、干支公式及推导公历日期的星期、干支公式及推导有了以上知识和计算,就能很容易的推导出相对通用的星期、干支公式 本文主要术语及运算符如下: 年序――所求之日所在的年份序数,用 abcd 分别表示其千位、百位、十位、个 位数字; 月序――所求之日所在的月份序数,用 u 表示; 日序――所求之日在该年份中的序数用 d 表示,在第 u 月的日序数用 r 表示如 2013 年的 3 月 8 日,d=31+28+8=67, u=3 ,r=8;ab=20, cd=13. 干支序数――干支在 60 甲子中的排序,如:甲子 1;乙丑 2;丙寅 3……癸亥 60;A mod B―― 表示取余运算,即:数字 A÷数字 B=余数 C,如:19mod3=1;[.]――表示取整运算,计算出来的结果是不大于方括号里面的数的最大整数,如[3.1]=3,[-1.2]=-2, [6]=6星期公式星期公式适用适用 1582 年年 10 月月 4 日之前:日之前: 星期={(年序星期={(年序 +3))+ [(年序年序+3))/4]+日序}日序}mod 7 上式中:1≤年序≤4 时,所得结果须加 1。
推导: 星期={6 (因为 1 年 1 月 1 日是周日,加 6 是为了实现从周一到周日的顺排,在此 6 称为起算基数) +(年序-1)(表示每个平年天数除以 7 后余 1 天)+[(年序-5)/4] (表示每 4 年闰 1 天,同时考虑到公元 4 年没闰) + 日序(从元旦到所求之日的总天数)} mod7 (余数为几就是星期几) ={6 +(年序-1)+ [(年序-5)/4] + 日序}÷7 取余数(余数为几就 是星期几) ={(年序 + 5 )+ [(年序-5)/4]+日序}mod 7………①={(年序 + 3)+ [(年序+3)/4]+日序}mod 7………②因为星期是 7 天一个循环,365÷7 的余数是 1,所以在累计 N 个整平年的 天数时,每年只计 1 天即可同时根据运算需要,既可忽略也可增加 7 的倍数, 以下运算、式子变换,I 常用此法由由①①到到②②的处理的处理是为了避免 [(年序-5)/4] 出现负整数,同时也使得式子更加整齐易记适用适用 1582 年年 10 月月 15 日之后:日之后: 公式一:公式一: 星期={(年序-星期={(年序-1))+ + [( (年序-年序-1 1))/4/4 ] -- [( (年序年序-1-1))/100/100] + + [( (年序-年序-1 1))/400/400 ] + + 日序}日序}mod 7 7推导: 星期 ={6+(年序-1)×365 + [(年序-5)/4 ] - [(年序-1501)/100](表示 1582 年后能被 100 整除的年份不置闰) + [ (年序-1201)/400 ](表示 1582 年后能被 400 整除的年份要置闰) + 日序-10(表示公历上没存在的那 10 天)}mod 7。
={6 + (年序-1) + [(年序-5)/4 ] - [(年序-1501)/100] + [(年序 -1201)/400 ] + 日序-10}mod 7 ={(年序-1)+ [(年序-1)/4 ] - [(年序-1)/100] + [(年序-1)/400 ] + 日序}mod 7 看看这个公式,是不是与网上流传的星期公式相同啊!! 公式二:公式二:星期星期={N 世纪基数 + (年序后两位-1) + [(年序后两位-1)/4] +日序}mod7={={N N + + (cd(cd--1)1) + + [(cd[(cd--1)/4]1)/4] +d+d}}mod7mod7当年份后两位数 cd=00 时,按 100 算N N 世纪基数世纪基数={5(N 世纪-17) +[(N 世纪-17)/4]}mod7N 世纪――所求之日所在的世纪由这个公式可求得 20 世纪的基数为 1,21 世纪的基数为 0 等(即 2000 年 12 月 31 日是星期日 60)记住 1、0 这两个基数,用该公式求 20、21 世纪的星期非常简便此公式只适用于 1601 年 1 月 1 日之后可用于编程的星期公式可用于编程的星期公式适用适用 1582.10.4 之前:星期公式(起算点前之前:星期公式(起算点前 1 年年 3 月月 1 日日 0 时周二,基数时周二,基数 1)) 星期=星期=﹛6ab+﹛6ab+ [cdcd /4/4 ] + + 2u+2u+[3(u+1)/5/5 ] +r+6﹜mod7+r+6﹜mod7 ((u≥3)当 1≤abcd≤3 时,所求结果须加 1,如周二加 1 天变周三; 当所求月份为 1、2 月时,分别将其当作是上一年的第 13、14 月份,年份 相应变成 abcd-1,即变成的上一年份数字。
如,求 2000 年 1 月 1 日是周几, 实质就是求 1999 年 13 月 1 日是周几推导: 星期=﹛1+6ab(100 年 25 闰,100 年总天数除 7 余 6)+ [cd /4 ] -1(公元 4 年没闰)+ 2u+[3(u+1)/5 ]-8 (表示从 3 月起,大、小月除以 7 各余 3 天、2 天,这个部分表示第 u月之前各月所余天数之和) + r(表示所求之日在 u 月中的序数)﹜mod7 =﹛1+6ab+ [cd /4 ] -1+ 2u+[3(u+1)/5 ]-8 + r﹜mod7 =﹛6ab+ [cd /4 ] + 2u+[3(u+1)/5 ] -8 + r﹜mod7 =﹛6ab+ [cd /4 ] + 2u+[3(u+1)/5 ] +r +6﹜mod7适用适用 1582.10.15 之后(起算点之后(起算点 1500 年年 3 月月 1 日日 0 时周日时周日,基数基数 6)) 星期=星期=﹛6+5(ab-15)+[ab /4 ]-3 + cd+ [cd /4 ] + 2u+[3(u+1)/5 ] -8-10(公历上没存在的那 10 天)+ r﹜mod7 ==﹛5ab+﹛5ab+ cd+cd+[abab /4/4 ] + + [cdcd /4/4 ] + + 2u+2u+[3(u+1)/5/5 ] +r+1﹜mod7+r+1﹜mod7例:2000 年 1 月 1 日是星期几? 解:实质就是求 1999 年 13 月 1 日是星期几∴ab=19,cd=99 ,u=13, r=1 星期=﹛5×19+99+[19 /4 ]+ [99 /4 ]+2×13+[3(13+1)/5 ]+1+1﹜mod7=﹛95+99+4+24+26+8+1+1﹜mod7=6例:2001 年 2 月 22 日是星期几? 解:实质就是求 2000 年 14 。












