Free考研资料 - 免费考研论坛

 找回密码
 注册
打印 上一主题 下一主题

干支日期循推法

[复制链接]
跳转到指定楼层
楼主
chongli 发表于 14-7-20 13:13:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chongli 于 14-7-20 13:19 编辑

如何最方便地把史籍中的干支日期转换成公历日期(只允许纪年转换查工具书),我根据自己研究,草创了几组公式,解决了这一难题。这种方法的依据有二,其一,甲子六十循环;其二,确知某一公历日期的干支,根据两个日期之间相隔天数,便可知其它任何一个日期的干支。我将这种方法称为“干支日期循推法”。

运用循推法,首先要选择一个便于记忆的近期甲子日固定地充当标准甲子日(简称标甲,我选用的是1995年8月1日),然后把要转换的日期定为目标日,只要计算出这两个日期之间的总天数(简作T)以及目标日与当年标准日(与标甲相同的公历日期)之间的天数(称差额日,简作N),便可将干支日期转换成公历日期。总天数一定是六十的倍数再加上一个不大于六十的数,实际运算中可以用这个不大于六十的数代替总天数。六十天轮了一个甲子,六万天就轮了一千个甲子,为方便运算,忽略不计这个六十的倍数并不影响转换结果,这个不大于六十的数称为虚拟总天数(简作T1)


循推法的第一个步骤就是计算出虚拟总天数,公式如下:

A种:T1 = [(世纪数×45 + 剩余周年数×5 + 剩余闰年数 -13)/60 ]± N
系转换公元1582年10月15日以前干支日期,简作 T1 = A1 ± N

B种:T1 =[(世纪数×44 + 剩余周年数 ×5 + 剩余闰年数 )/60 ] ±N
系转换公元1582年10月15日以后的干支日期,简作 T1 = B1± N
C 种: T1 = [(周年数×5 + 闰年数)/ 60 ] ± N
系转换与标甲之间相差不足一世纪的干支日期,简作 T1 = C1±N

世纪数是指目标日与标甲之间相隔世纪数;
周年数是指两个日期之间相隔年数;
剩余周年数是指扣除世纪数后两日所隔年数;
闰年数是指两日之间所含所有闰年数目;

剩余闰年数是指剩余周年里所含闰年数目;
[]是指求出分子除以分每之后所得余数的计算符号,如[34/60]=34;[123/60]=3

例如1273年与1995年之间,世纪数为7,剩余周年数为22,剩余闰年数为5,(如以1995年为准,闰年数恒定为周年数除以4之后的余数,但以 1997年为准就大不一样)。
1927年与此同时1995年之间,周年数为68,闰年数为17;公历平年365天,即取5,闰年多一天,就再取闰年数;一个世纪有25或24个闰年,因而有[(100×5+25)/4]=45或[(100×5+24)/4]=44。根据1582年修定后的公历(以前称儒略历),1582年10月5日即10月15日,也就是说当年10月5日至14日在历史上并不存在,按新置闰法,1700,1800,1900年为平年,所以公式A中减去多出的13天。假如目标日在当年标准日之前就用+N表示计算中,差额日包含在总天数当中;目标日在当年标准日之后(含标准日)就用- N,表示计算中差额日不在总天数之内。有些日期仿佛徘徊在标准日前后,分别用±两种方法得到两个日期,其实自然而然就会感觉到其中哪个就是所需要的日期。在使用公式B时,如果转换1600年2月29日以前的日期,分子应该再加上1,因为1600年为闰年。 

1:唐宣宗大中二年五月己未,(公元848年)

T1=[(11×45+47×5+11-13)/60 ]+ N=8+N


2:明崇祯十七年十一月甲寅,(公元1644年)

T1=[(3×44+51×5+12)/60]-N=39-N

3:公元1978年三月癸亥,

T1=[(17×5+4)/60]+N =29+N


循推法的第二个步骤就是把差额日计算出来。因为目标日与标甲的干支是已知的,所以通过解一元一次方程,差额日即能算出·方程(即公式)如下:

A种: 60-(A1±N)=目标日干支序号

B种: 60-(B1±N)=目标日干支序号

C种: 60-(C1±N)=目标日干支序号

ABC三种情况,A1B1C1的解释,±N的取法均同第一步骤。干支序号指一个具体干支在六十甲子中的排序(甲子1,乙丑2……癸亥60),心算时,以天干数减地支数(如天干小则先加工厂10)的得数为个位数的12倍数再加上地支数即为干支序号,如丁未:4+10-8=6,36+8=44,表明排序为44。从一个具体干支日到下一轮甲子日之间的天数,就是用具60减去其序号,如从丁未日到下个甲子日之间,即有60-44=16天,这组公式应不难理解。解出的差额日以不大于60的数为佳,如不是则以60加减之即可。实际上,真实差额日的数字就是60的倍数(也可为0)加上这个不大于60的数。一般来说,农历日期与对应的公历日期比较,公历一般超出20-50天左右,如农历正月初一总在公历元月20日至2月20日之间,根据这点,那个60的倍数我们完全可以正确估算出来。
1同上宣宗例,60-(8+N)=56,N=-4+60=56,60×0+56=56
2同上崇祯例,60-(39-N)=51, N=30, 60×2+30=150
3同上1978例,60-(29+N)=60, N=-29+60=31, 60×1+31=91


循推法的第三个步骤就是依据差额日推出干支日期对应的公历日期。据上所述,有两种情况,第一种是目标日在当年标准日之前,差额日即表示为这两个日期之间所夹天数(不含这两日);第二种是目标日在当年标准日之后,差额日即表示以标准日为首日的第某(即差额数)日为求公历日期,是1则就是标准日。
1同上宣宗例,差额日56,6月5日与8月1日之间共夹有56天,即为所求。
2同上崇祯例,差额日150,以8月1日为首第150天为12月28日,即为所求。
3同上1978例,差额日91,5月1日与8月1日之间夹有91天,即为所求。
在第一种情况中,当差额日为0时,即表示所求日期为标准日的“昨天”。在第二种情况中,假如差额日超过标准日与年底12月31日之间的天数,我们则继续推至公历次年的一二月份,因为中历一年与西历一年并不完全照合。

在理论上,可用循推法转换标甲之前任意一个日期,但也应该注意一些问题。儒略历是在公元前46年开始才使用的,最初有过一些变化,包括大小月份的最终确定及2月份最后一天移至8月份。先秦时,各种历法建正各有不同。所以综合考虑,运用循推法还是转换公元以后日期为佳。当然,想知道标甲以后的某个公历日期是什么干支的话,也方便——[总天数/60]=干支序号。

参考用例
1, 汉永宁元年(120年)七月乙酉:公元120年8月12日
2,梁武帝大同四年(538年)二月己亥:公元538年3月25日
3,唐贞观元年(627年)九月庚戌:公元627年10月25日
4,唐贞元十七年(801年)五月壬戌:公元801年6月15日
5,唐景龙元年(707年)六月丁卯:公元707年7月4日
6,宋乾德元年(963年)闰十二年乙卯:公元964年1月24日
7,南宋庆元六年(1200年)十一月癸丑:公元1200年12月8日
8,明万历二十六年(1598年)四月丁卯:公元1598年5月17日
9,明万历二十九年(1602年)九月丁亥:公元1602年10月31日
10,公元1978年三月甲子:公元1978年5月2日
您需要登录后才可以回帖 登录 | 注册

本版积分规则

联系我们|Free考研资料 ( 苏ICP备05011575号 )

GMT+8, 24-11-30 09:35 , Processed in 0.202549 second(s), 10 queries , Gzip On, Xcache On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表