在上次的天干地支纪年法算法中,没有给出日干支的换算方法,应网友的要求,现在补充。因所知有限,参考了网上资料,如有不不妥之处,还请各位不惜指正。
在预测、择日等活动中,经常需要知道某一天的日干支,虽然现在很方便可以在日历、上网上查找,但是如果没有日历、网络可用,那么计算起来确实比较复杂,所以掌握一种简单的换算方式,还是有必要的。而且在计算历史事件的日期间隔,以及是否有闰月存在时,干支纪日比起记载某月某日,其优势是非常容易。因为汉历(农历)每个月29或30日不定,而且有没有闰月也不知道,故如果日期跨月,则计算将会非常困难,这时候可以体现出干支纪日的优势。
因为格里历的平年有365日,而每4年一次闰年,但是如果遇上整百年,公元年能被400整除才能认定为闰年(这是因为按照当代立法计算,四年一闰的规定使每年多出0.0078天,经过400年大约会多出3天,如果在能被400整除年份的前面3个百年不算闰年,则正好平衡),闰年有366日,平均一年365.2425日,所以400年146097日和一甲子的60日,最小公倍数是2921940日,合8000年。这就是说,每80年,干支纪日对应的格里历月日日期若没有遇到能被100但非400整除的公元年,会反复一次循环,但整体而言,假设未来从不改格里历,每8000年,干支纪日对应的格里历月日日期才会反复一次完整的循环。1912年2月18日,合汉历(农历)壬子年正月初一,以及1992年2月18日,都是“甲子日”。
废话不多说,我们开始吧,首先我们要确定天干地支对应的数字:
十天干: 甲—1、乙—2、丙—3、丁—4、戊—5、己—6、庚—7、辛—8、壬—9、癸—10。
十二地支:子—1、丑—2、寅—3、卯—4、辰—5、巳—6、午—7、未—8、申—9、酉—10、戌—11、亥—12。
一、日干计算法的口诀:
年数从中分两边,乘5除4取整数。
月加1 后 3 下5, 日子还是多3天。
求得结果减前边,除10余数定天干。
对应的日干计算公式如下:
1)G=5*(x+y)+x/4+y/4+(m+1)*3/5+d-3-x;
2)G/10的余数(注:如果刚能被10整除,即余数为0时,可视为余数为10)
说明:x为年份前2位数,y为年份后2位数,m为月数,d为日数,如果除数有小数,则取整数。
二、日支计算方法的口诀:
日支跟着天干转,前边4倍 10再添。
1 月 2月续上年,i取0、6奇偶辨。
除以 12 求余数, 对应代号是地支。
对应的日支计算公式如下:
Z=G+4x+10+i
说明:G为天干公式中的计算结果,x为年份前半部分(前边),i为一个变数--当月数是奇数时为“0”,当月数为偶数时为“6”。
对于以上公式中的分式(求商的式子)取其整数,1月和2月按上年的13月和14月计算,口诀中的前边指年份的前2位数字。
最好的教导是举例,现举例说明如下:
如求2012年12月8日的日干支:
如上所述,日干的公式为: G=5*(x+y)+x/4+y/4+(m+1)*3/5+d-3-x
把2012从中间分为两边,即20和12,也就是x=20,y=12,m=12,d=8,代入上式为G=5*(20+12)+20/4+12/4+(12+1)*3/5+8-3-20=160+5+3+7+8-3-20=160。160除10得16,余数为0,则认为余数为10,10对应的天干代号是"癸".
说明:在公式中(12+1)*3/5=13*3/5=39/5=7....4,根据口诀"乘5除4取整数",所以只用7就行了.
日支公式:Z=G+4x+10+i.G=160,x=20,i=6(因12月为偶数,口诀:i取0、6奇偶辨)--代入上式为Z=160+4*20+10+6=160+80+10+6=256。256除以12得21余4,4对应的地支代号是"卯".所以,2012年12月8号是"癸卯日".
再举一个例子,求1967年2月10号,对应的日干支。
日干:G=5*(x+y)+x/4+y/4+(m+1)*3/5+d-3-x,其中x=19,y=66,m=14,d=10,代入上式得:G=5*(19+66)+19/4+66/4+(14+1)*3/5+10-3-19=5*85+4+16+15*3/5+10-3-19=442,将442除以10得44,余数为2, 2对应的天干是"乙",
日支:Z=G+4x+10+i,其中G=442,x=19,i=6,代入上式得:Z=442+4*19+10+6=432+76+16=534,534除以12等于44,其余数为6,6对应的地支代号是巳,求得地支是巳。
所以,1967年2月10号的干支是"乙巳日"。有兴趣的,自己可以随便给个日期计算,上网查万年历比对,是不是正确!