玩轉公曆推算日干支
玩轉公曆推算日干支
關於從公曆日期推算日干支,網上多有網友撰文介紹,有的用公式,有的用口訣,如默誦「卯申子巳」法、「欲推來年元旦日先知今年日干支」法、「減一除四取商數」法等,方法林林總總,不一而足。但有的方法只適用某一時段,超過某時段範圍方法失效;有的方法推算過程複雜,不易掌握。普遍缺點是讀者看後知其然不知其所以然,按其方法推算,能推出正確的結果,卻不知道為什麼。為便於理解,幫助提高運算準確性,藉助大師們的經驗,作個綜述。
一、基本規律:
(一)公元前(儒略曆)
年份減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年的整數倍的年份(因沒有公元前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年不是閏年,都是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年,到時一起驗證這個結果。哈哈!
推薦閱讀:
※清明節是農曆幾月初幾?很多人沒搞明白公曆,農曆,陰曆,陽曆
※【生活休閑】點一下你的生日便會出現你的性格(以公曆計算)
※公曆轉換甲子歷不須查萬年曆_見機閣__子與
※公曆8月吉凶預報(8月1日—31日)
※公曆紀年怎樣換算成干支紀年