关于从公历日期推算日干支,网上多有网友撰文介绍
关于从公历日期推算日干支,网上多有网友撰文介绍
玩转公历推算日干支
关于从公历日期推算日干支干支历法第12天,网上多有网友撰文介绍,有的用公式,有的用口诀,如默诵“卯申子巳”法、“欲推來年元旦日先知今年日干支”法、“减一除四取商数”法等,方法林林总总,不一而足。但有的方法只适用某一时段,超过某时段范围方法失效;有的方法推算过程复杂,不易掌握。普遍缺点是读者看后知其然不知其所以然,按其方法推算,能推出正确的结果,却不知道为什么。为便于理解,帮助提高运算准确性,借助大师们的经验,作个综述。
一、基本规律:
(一)公元前(儒略历)
年份减1能被4整除的都是闰年干支历法第12天,其余是平年。如公元前5年减1为4,能整除,是闰年。
(二)公元1年至公元1582年10月4日(儒略历)
能被4整除的年份都是闰年。公元1582年10月4日直接跳到10月15日,前后相差11天,中间没有10月5日至10月14日这10天。
(三)1582年10月15日(包括当日)以后(格里历)
1、能被100整除且能被400整除的年份是闰年,能被100整除但不能被400整除的年份是平年;即每4个世纪有3个平年,1个闰年。如1600年置闰,1700、1800、1900年不置闰,2000年置闰,2100、2200、2300年不置闰,依此类推。
2、其他不能被100整除的年份,能被4整除的年份是闰年,不能被4整除的是平年。
(四)公元1582年以前,每80年相同月日的干支重复一次
如公元前1年12月31日干支是丁丑,公元前81年12月31日、公元80年12月31日的干支都是丁丑。(注意:没有公元0年或公元前0年)。
(五)闰年每年366天,其中2月为29天;平年每年365天,其中2月为28天。
二、推算某年某月某日干支的方法
(一)1582年以前日干支的推算:
1、确定基点年:以公元前1年12月31日丙子日(序号13)为起始点关于从公历日期推算日干支,网上多有网友撰文介绍,往前往后推80年的整数倍的年份(因没有公元前0年,公元前的要减1年,如公元前81年减1为80,公元前161年减1为160)作为推算基点。如公元前4001、前2001、前1601、前801年、公元80年、160年、240年、800年、1040年、1440年等,12月31日的干支都是丙子(序号都是13),都可作为基点年。
2、寻找距离某年之前较近的闰年年份,计算该年份离基点年的差,推算该年份12月31日的干支。以计算1463年的3月15日的干支为例,可以1440年为基点,可知离1463年之前较近的闰年是1460年,该闰年与基点年相差20年,其中有5个闰年,则1460年12月31日的干支序号为:13+20*5+5=118,减去60的数倍,最小余58,58即为1460年12月31日的干支序号。
3、推算未计算年份至当日的总天数。1461、1462年不是闰年干支历法第12天,都是365天,用60除余5,则总天数视为2*5=10,1463年1月1日至3月15日为:1月31天+2月28天+3月15天=74,即未计算年份至目标日的总天数为10+74=84,用60除余24。
4、用步骤2的闰年底干支序号加步骤3除数,即58+24=82,用60除,余22,即为1463年3月15日干支的序号,按甲子为1,乙丑为2,……癸亥为60,可知所求日干支为乙酉。
5、综上所述,设定基点年12月31日干支序号为A,基点年为B,距离某年之前较近的闰年年份为C,未计算年份整年数为D,求日干支的当年元旦到当日的总天数为E,可用下列公式计算:
所求日干支序号=A+(C-B)/4*21+D*5+E,得数用60除,最小余数即是该日干支序号。上例计算:
13+(1460-1440)/4*21+2*5+74
=13+105+10+74
=202,用60除余,最小余数为22,即知为1463年3月15日的干支为乙酉。
按基本规律(四),可知1543年、1383、1303、1223年……等年份的3月15日干也都为乙酉。即使推算到公元前2538年,3月15日的干支也是乙酉。
(二)1582年以后日干支的推算
算法大体与1582年的算法相近,因格里历与儒略历的置闰方法不同,必须注意被100整除的年份每400年有3次不是闰年。设定基点年时,以80年为周期,每跨越1次这种不置闰的年份要相应加减1个干支序号。从基点向前跨越1次,序号要加1,向后跨越1次则序号减1。其余推算法则与1582年前的推算方法相同。
如1600至2000年之间有3个世纪年份(1700、1800、1900年)不置闰,2000年是闰年,12月31日为癸亥,序号60,往前推80年1920年则12月31日干支序号也是60,往前推80年到1840年12月31日,跨越了1900年,因1900年不是闰年,少了一天,要相应加1个干支序号,即序号为61,也就是1,是甲子。同样,再往前推80年至1760年,又跨越了1800年这个平年,再加1个干支序号,是2,乙丑是也!
为也便于计算,本人通常以2000年作为起始点来推算基点年,因为2000年12月31日的干支序号是60(可以视为0,也可以视为120、180),既好记也好算。
(三)跨越1582年10月4日、15日前后的处理办法
这里不作介绍关于从公历日期推算日干支,网上多有网友撰文介绍,让有兴趣的朋友自己品味。
如果有朋友问,公元10000年12月31日干支是什么?我大概就这样算:2000年12月31日的干支序号是60,400年后减3,800年后减6,8000年后减60……结果是,公元10000年12月31日的干支序号是60,天干地支是癸亥。
算得对不对?我希望能和各位朋友再活8000年,到时一起验证这个结果。哈哈!