打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
关于公历年月日与干支的转化问题(
三、 公元日序数的算法: 

1、公元1582年10月4日前日子的公元日序数求法: 
不难按历法知道: 
公元日(P)=365*(年号(Y) -1)+闰年数+ 本年的日数 
根据儒略历四年一闰的法则(逢被4整除的均置闰)得: 

P = 365*(Y-1)+ [ Y/4] + Q 

式中“[ ]”是取整符号;Q是从要算的日子到1月1日的天数加1,由于公历的月份有固定的天数,1、3、5、7、8、10、12是大月31天,4、6、9、11日小月30天,2月份置闰月严格按28天算,(为了直观些,稍后我会用坐标来移及一些数学方法,表述成一条用月、日表示的代数式)。 
值得注意的是:闰年时,未到3月1日要减1。 

例1、 公元227年5月4日的公元日序数是:365*226+[227/ 4]+31+28+31+30+4=82670 
例2、 公元1582年10月4日的公元日序数是:365*1581+[1582/4] + 31*5+30*3+28+4 =577737 

2、公元1582年10月15日后的日子的公元日序数求法: 
公元1582年10月15日是公元1582年10月4日的后一天,故其公元日577738(见例2),格列哥里历按四年一闰,被4整除的均置闰,但逢百年时需被400整除的方置闰,其它百年不置,故四百年有97闰。公式为: 

P=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q+15-3-10 
=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q +2 

式中第2、3、4项是格列哥里历的置闰方法。我们可以对照比1582年以前的置闰方法,多了- [Y/100] +[ Y/400]一项,故需减去 - [1582/100]+[1582/400]以校正之;同时从1582年10月4日到1582年10月15日之间跳过了10日,所以同时减去10,使公元日连续。大家可以代入验算一下,它与此1582年10月4日的序数是连续的。 

例3、 公元1582年10月15日的公元日序数: 
365*1581+[1582/4] - [1582/100] + [1582/400] + 31*5+30*3+28+15+2 =577738 
例4、 公元2003年4月2日的公元日序数: 
365*2002+[2003/4] - [2003/100] + [2003/400] + 31+28+31+2+2 =731309 

3、公元前日子的公元日序数求法: 
尽管儒略历在公元前46年完成,但以前的日期一般的历史书均按儒略历上推,所以也从约定俗成。儒略历按四年一闰,其公式是: 

公元日序数=365*年号(负号)+闰年数(负号)+本年的日数(正号) 
P= -365*Y - [(Y+3)/4]+Q 

公元前的求法与公元后的有所不同:后者的计算方向从年、从月、从日是一路远离原点的;前者则是“年”远离了原点,月、日反过来接近原点,这点大家要记住。 
(如果选取一个很前的原点,则可以使序数的方向永远为正,但为了便于一般人理解及习惯,我还是放弃了这样叙述------事实上太初历等古代历法一般选取一个很远的天文日作原点的) 

例5、 公元前1年1月1日的公元日序数是:-365*1- [(3+1)/4 ]+1= -365 
例6、 公元前202年2月28日的公元日序数:-365*202 – [(202+3)/4] + 31+28= -73722 

我们把三个公式并列如下: 
(公式1) 
P= -365*Y - [(Y+3)/4]+Q (公元前) 
P = 365*(Y-1)+ [ Y/4] + Q (公元后至1582年10月4日) 
P=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q +2 (1582年10月15日后)
 

(以下一段选读) 
事实上我们可将坐标“平移”,将原点移到公元1年2月28日。将3月1日“作为”一年的开端,平移的目的是为了使置闰放在一年的最后一天,减小置闰对各月份的影响。(事实上我开始推导时是用这方法的,求得结果后才平移成现在的方式)如此,作月份相应减小2,(3=1,4=2,…………1月等于上年的11月,2月是12月),公元日序数则相应增加59。如此则Q的值也可用相关的月(M)、日(D)代数式表示: 
Q=30(M-1)+[0.6(M-1)+0.5] +D 
(这纯是个数学问题,我不想在这里证明。反正是十二个月,大家直接代入看看) 
如此变换后的公式变为:Y年M月D日 (M为正常月减2,1月时为11月) 
(公式二) 
P= -365*Y - [(Y+3)/4]+30M+[0.6M-0.1]+D+29 (公元前) 
P = 365*(Y-1)+ [ Y/4] + 30M+[0.6M-0.1]+D+29 (公元后至1582年10月4日) 
P=365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] + 30M+[0.6M-0.1]+D+31 (1582年10月15日后) 

四、干支的求法 
知道了一个日子的公元日序数是,要求该日子的干支序数是一个很容易容易的事了,思路是: 
一已知干支的日子———推出原点的干支序数———推出任一历史日子序数 
(读者诸公一定想到用类似的方法求有固定周期的朔望了) 
不难知: 
历史日子的干支序数= (原点的干支序数+ 公元日序数)除以60取余数 
K=(‘K + P)mod 60 

利用例4,公元2003年4月2日的公元日序数是731309,干支乙巳(序数42)则 
42=(‘K+731309)mod 60 ‘K=42-731309= -731267= -47 =13 mod 60 
即原点(公元前1年12月31日)的干支序数为13(丙子),我们将结果代入公式一,则 
(公式三) 
K=(13+P)mod 60
 

例7、 求公元1582年10月15日的干支。利用例3的结果有 
K=(577738 + 13)mod 60=11,即该日甲戌。 

我们将公式三代入公式一,则 

K= (-365*Y - [(Y+3)/4]+Q+13 )mod 60 (公元前) 
K= (365*(Y-1)+ [ Y/4] +Q+13 )mod 60 (公元后至1582年10月4日) 
K=(365*(Y-1)+ [Y/4] - [Y/100] +[ Y/400] +Q +15)mod 60 (1582年10月15日后) 


我们当然可以使用数学方法将公式化简,以下是我使用的化简式: 
(公式四) Y年M月D日(M从三月开始,M相应减2) 

K= (-5Y-[(Y+3)/4]+30M+ [0.6M-0.1]+ D+42 ) mod 60 (公元前) 
K=(5Y+ [ Y/4] + 30M+ [0.6M-0.1] + D+37)mod 60 (1~1582:10:4) 
K=(5Y+ [Y/4] - [Y/100] +[ Y/400]+ 30M+ [0.6M-0.1]+ D+ 39)mod 60 (1582:10:4以后) 

我用手上天文台编的三千年公历干支朔望对照表抽样校对了几个日子,准确无误。可见它也是采用同样原理编订的。 
反过来,知道干支及大约的月份,求公元日序数(公元历)只是解方程的问题而已。 

五、举例及应用 

例8、 汉书所说高祖五年(己亥)二月甲午即皇帝位的,该日的公历是多少? 
高祖五年己亥是前202年,二月大约在公历3月附近,干支甲午序数31,代入公式四得 
-202*5 – [(202+3)/4]+30*1+[0.6M-0. 1]+D+42 =31 mod 60 
整理得 -989+D=31 mod 60 D=(31+989 ) mod 60 D=0 mod 60 
解出D=0,或60,即该日是3月0日(2月28日),或过60天以后的4月29日。 

验算:严格按儒略历四年一闰的算法,公元前202年2月28日的公元日序数为 –73722, 
-73722+13= -73709 = - 29 =31 mod 60 该日甲午。演算没错!! 

六、结语:方法是类似解释几何的的方法: 
首先建立一个连续时间坐标, 
第二是根据公历的规律建立任意日子到原点间的距离公式(公元日序数) 
第三是对于有固定周期的属性(干支、月相等),可从任一已知属性的日子利用与原点的距离推出原点的属性。
第四是根据原点的属性利用某点与原的距离推知该点的属性。 
第五公式的化简与选择只是一些技术问题。 
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
根据公历日期计算当日干支(详解)
天干地支纪日
推算年、月、日、时干支
两种纪日符号的换算
推算日干支口诀
历法与天干地支
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服