当前位置:文档之家› 公元1年1月1日相关的几个话题

公元1年1月1日相关的几个话题

元年1月1日是星期几、干支为何,其公式是?这天到底发生了什么?公历元年1月1日是星期几的问题,网上的回答莫衷一是,有说周一、周五、周六的等等,以回答周一的居多,就是少有人回答是周日,更没有人给出有说服力的证明。

干支为何,几乎没人问。

为转嫁对夏日酷热的注意,闲人就说道一下相关的问题,以更新我那老不更新的QQ空间。

要准确回答这个问题,必须弄清公历(也称格里高利历或儒略历)于元年(不存在公元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日天数)=577736 1582年10月15日--1600年12月31日的天数=78+(18×365+5闰)=6653 1601年1月1日--2013年1月6日星期日的天数=412×365+100闰+6(2013年的6天)=150486三项之和=577736+6653+150486=734875734875÷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)/4 ] - [(年序-1)/100] + [(年序-1)/400 ] + 日序}mod 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 + (cd-1) + [(cd-1)/4] +d}mod7当年份后两位数 cd=00时,按100算。

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+ [cd /4 ] + 2u+[3(u+1)/5 ] +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+ cd+[ab /4 ] + [cd /4 ] + 2u+[3(u+1)/5 ] +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月22日是星期几。

∴ ab=20=>20-7×2=6 ; cd=0 ;u=14;r=22=>22-7×3=1 星期=﹛5×6+0+[20 /4 ]+ [0/4 ]+2×14+[3(14+1)/5 ]+1+1﹜mod7=﹛30+0+5+0+28+9+1+1﹜mod7=4干支公式推导公历日期干支公式,可以照葫芦画瓢,只是循环周期不同而已。

实际上,本人是先推导日干支公式,后推导星期公式。

元年1月1日的干支:经查,2013年2月26日的干支是癸亥,即60甲子的最后一天。

相关主题