玩轉公歷推算日干支
關于從公歷日期推算日干支,網(wǎng)上多有網(wǎng)友撰文介紹,有的用公式,有的用口訣,如默誦“卯申子巳”法、“欲推來年元旦日先知今年日干支”法、“減一除四取商數(shù)”法等,方法林林總總,不一而足。但有的方法只適用某一時段,超過某時段范圍方法失效;有的方法推算過程復雜,不易掌握。普遍缺點是讀者看后知其然不知其所以然,按其方法推算,能推出正確的結果,卻不知道為什么。為便于理解,幫助提高運算準確性,借助大師們的經(jīng)驗,作個綜述。
一、基本規(guī)律:
(一)公元前(儒略歷)
年份減1能被4整除的都是閏年,其余是平年。如公元前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年的整數(shù)倍的年份(因沒有公元前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的數(shù)倍,最小余58,58即為1460年12月31日的干支序號。
3、推算未計算年份至當日的總天數(shù)。1461、1462年不是閏年,都是365天,用60除余5,則總天數(shù)視為2*5=10,1463年1月1日至3月15日為:1月31天+2月28天+3月15天=74,即未計算年份至目標日的總天數(shù)為10+74=84,用60除余24。
4、用步驟2的閏年底干支序號加步驟3除數(shù),即58+24=82,用60除,余22,即為1463年3月15日干支的序號,按甲子為1,乙丑為2,……癸亥為60,可知所求日干支為乙酉。
5、綜上所述,設定基點年12月31日干支序號為A,基點年為B,距離某年之前較近的閏年年份為C,未計算年份整年數(shù)為D,求日干支的當年元旦到當日的總天數(shù)為E,可用下列公式計算:
所求日干支序號=A+(C-B)/4*21+D*5+E,得數(shù)用60除,最小余數(shù)即是該日干支序號。上例計算:
13+(1460-1440)/4*21+2*5+74
=13+105+10+74
=202,用60除余,最小余數(shù)為22,即知為1463年3月15日的干支為乙酉。
按基本規(guī)律(四),可知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年,到時一起驗證這個結果。哈哈!