乾支紀日
乾支紀日,60日大致合2個月一個周期;一個周期完了重複使用,周而復始,循環下去。確定的文獻指出乾支紀日始於魯隱公三年夏曆二月己巳日(公元前720年2月10日)。
因為儒略曆的平年有365日,而每4年一次,公元年能被4整除,閏年有366日,平均一年365.25日,所以4年1461日和一甲子的60日,最低公倍數是29220日,合80年。這就是說,每80年,乾支紀日對應的儒略曆月日日期會反覆一次循環。(公元4年本來應為閏年,但因為公元前45年開始實施儒略曆後,“每隔3年”加一次閏日被誤為“每3年”加一次閏日,所以羅馬皇帝屋大維下令前5年、前1年、4年停閏以修正錯誤置閏。)
因為公曆的平年有365日,而每4年一次,公元年能被100但非400整除,閏年有366日,平均一年365.2425日,所以400年146097日和一甲子的60日,最低公倍數是2921940日,合8000年。這就是說,每80年,乾支紀日對應的公曆月日日期若沒有遇到能被100但非400整除的公元年,會反覆一次循環,但整體而言,假設未來從不改公曆,每8000年,乾支紀日對應的公曆月日日期才會反覆一次完整的循環。1912年(中華民國元年)2月18日,合農曆壬子年正月初一,以及1992年2月18日,都是是“甲子日”。
換算口訣
口訣
乘五除四九加日,
雙月間隔三十天。
一二自加整少一,
三五七八十尾前。
注釋
第三句中的“整少一”,為能被4整除之年一二月份比其他三年都要少加一;
第四句反映的是大月規律,即8月加3、11月加5,依此類推。
換算方法
乾支是天干和地支的組合。天干有十個,即甲、乙、丙、丁、戊、己、庚、辛、壬、癸;地支有十二個,即子、醜、寅、卯、辰、巳、午、未、申、酉、戌、亥。天干和地支從“甲子”開始,按順序逐一相配,各用到最後一個時,再從第一個開始繼續相配,就形成了六十個乾支,也稱“六十花甲子”。
乾支序號互推
根據乾支的構成條件,其循環周期必然是天干數和地乾數的最低公倍數。而60正是10和12的最低公倍數。
如果我們把“甲子”編為1號,“乙丑”編為2號,這樣編下去,就可以得到一個乾支和序號的對照表,如下:
天干 地支 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
1 | 甲子 | 乙丑 | 丙寅 | 丁卯 | 戊辰 | 己巳 | 庚午 | 辛未 | 壬申 | 癸酉 | 甲戌 | 乙亥 |
2 | 丙子 | 丁丑 | 戊寅 | 己卯 | 庚辰 | 辛巳 | 壬午 | 癸未 | 甲申 | 乙酉 | 丙戌 | 丁亥 |
3 | 戊子 | 己丑 | 庚寅 | 辛卯 | 壬辰 | 癸巳 | 甲午 | 乙未 | 丙申 | 丁酉 | 戊戌 | 己亥 |
4 | 庚子 | 辛丑 | 壬寅 | 癸卯 | 甲辰 | 乙巳 | 丙午 | 丁未 | 戊申 | 己酉 | 庚戌 | 辛亥 |
5 | 壬子 | 癸丑 | 甲寅 | 乙卯 | 丙辰 | 丁巳 | 戊午 | 己未 | 庚申 | 辛酉 | 壬戌 | 癸亥 |
由序號得到對應乾支是很容易的,序號除以10的餘數就是天干的序數(如果餘數是0,則為最後一個天干癸),序號除以12的餘數就是地支的序數(如果餘數是0,則為最後一個地支亥)。比如37號乾支,因為37 mod 10=7(mod表示取餘數),對應的天干是庚,37 mod 12=1,對應的地支是子,所以37號乾支就是庚子。
顯然,一個整數除以10的餘數就是它的個位數,這就使求天干更方便了。
而由乾支推它的序號,也不困難。這其實就是一個同餘方程組的求解問題,用初等數論中的中國剩餘定理就可以解決。比如要算戊午的序號是多少,根據上面由序號得到對應乾支的原理,易得如下方程組:
{ x mod 10 = 5
{ x mod 12 = 7.
其中x是待求的乾支序號。根據中國剩餘定理,有:
x ≡ 6 * 5 - 5 * 7 (mod 60) = 55,
即戊午的序號是55.這和上面的對照表的是一致的。一般地,若天干的序號為m,地支的序號為n,則乾支的序號為:
x ≡ 6m - 5n (mod 60) (1)
如果6m-5n的結果是正數,這個數就是乾支的序號;如果是負數,把它加上60就是乾支的序號。
年乾支的求算
需要說明的是,乾支紀年紀的是農曆年,而不是公曆年。但因為農曆年的歲首和公曆年的歲首相隔較近,使農曆年總是和某一公曆年的大部分重合,因此,通常也用公曆年的年份表示和它大部分重合的農曆年。這樣就很容易給出農曆年的乾支序號為:
x = (Y-3) mod 60, (2)
其中Y是年份。得到了乾支序號x,就可以求出相應的乾支來。比如2004年的乾支序號:
x = (2004-3) mod 60 = 2001 mod 60 = 21,
21 mod 10=1,天干為甲,21 mod 12=9,地支為申,因此,2004年是甲申年。
用Y-3直接除以10,就可以得到天干,用Y-3直接除以12,就可以得到地支。這是因為
x = (Y-3) mod 60等價於Y-3 = 60 * n + x,
其中n是Y-3除以60的商數。等式兩邊同時除以10,餘數也必然相等。而右邊第一項是60的倍數,自然也是10的倍數,能夠被10整數,於是Y-3除以10的餘數就必然等於x除以10的餘數。因此,其實我們完全用不著先求乾支的序號,而可以分別求天干和地支,合起來就是乾支,這樣就減少了一步運算。而對於年份的天干,同樣只須看末尾一位。末尾為4的年份的天干總是甲,末尾為5的年份的天干總是乙……依次類推。
月乾支的求算
月乾序=(所求年尾數+2)*2+月份(取尾數)
月支序=月份+2(大於12的時候減去12)
例:2015年5月份的乾支是多少?
月乾序=(5+2)*2+5=19取尾數9,則乾序是壬;
月支序=5+2=7,則支序是午。則2015年5月份的乾支是壬午。
日乾支的求算
仿照星期的求算,得到一個比較直觀的計算日乾支的公式如下:
G = (Y-1)*5 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D + 15, (3)
其中Y是年份,D是累積天數,[...]表示取商數,也就是只取計算結果的整數部分。把G除以60,餘數就是乾支的序號。或者把G除以10或12,可以直接得到日天干和日地支。不過,和形式相似的求星期的公式一樣,這個公式還不夠簡煉,特別是第一項(Y-1)*5,在Y為四位數年份時,計算出來的結果是一個較大的四位數或五位數,口算很不方便。用推導蔡勒公式的辦法,可以改進這個公式。先來看和年份有關的部分的改進。
按公曆的置閏規則,一個世紀的總天數可能是36524天,或36525天。如果這個世紀中末尾為00的年份是閏年,這個世紀就只有36525天;否則就只有36524天。不妨稱有36524天的世紀為“平世紀”,有36525天的世紀為“閏世紀”。對於平世紀,因為36524 mod 60 = 44,所以,每過一個平世紀,同一天的乾支就向後推進44個序號。同樣,每過一個閏世紀,同一天的乾支就向後推進45個序號。這就得到一個計算每個世紀第一年(年份末尾為01)3月1日的公式:
G = 44C + [C/4] + 15, (4)
其中C是世紀數減一。
而計算任一年3月1日的乾支的公式也可以很快得到:
G = 44C + [C/4] + 5(y-1) + [y/4] + 15,即
G = 44C + [C/4] + 5y + [y/4] + 10, (5)
其中y是年份後兩位數字。
下面再列出每月天數:
月份 | 1月 | 2月 | 3月 | 4月 | 5月 | 6月 | 7月 | 8月 | 9月 | 10月 | 11月 | 12月 |
天數 | 31 | 28(29) | 31 | 30 | 31 | 30 | 31 | 31 | 30 | 31 | 30 | 31 |
減30後的剩餘天數 1 -2(-1) 1 0 1 0 1 1 0 1 0 1
如果把1月和2月看成是上一年的13月和14月,同樣可以得到下面的式子:
D’ ≡ [3*(M+1) / 5] + d - 2 (mod 10) (6)及
D’ ≡ [3*(M+1) / 5] + d - 2 + i (mod 12) (奇數月i=0,偶數月i=6), (7)
其中,D’是從3月1日開始算起的累積天數,M是月份,d是日數。把(6)(7)兩式和(5)式合起來,再進行適當的化簡,就得到了計算公曆任意一天的天干和地支的公式:
g = 4C + [C/4] + 5y + [y/4] + [3*(M+1) / 5] + d - 3; (8)
z = 8C + [C/4] + 5y + [y/4] + [3*(M+1) / 5] + d + 7 + i (奇數月i=0,偶數月i=6),(9)
如果先求得了g,那么
z = g + 4C + 10 + i (奇數月i=0,偶數月i=6). (10)
g的個位數就是天干序號,z除以12的餘數就是地支序號。這裡需要再次強調:1月和2月是當做上一年的13月和14月來算的,因此C和y也要按上一年的年份來取值。
把(8)(9)兩式和蔡勒公式對比一下:
W = -2C + [C/4] + y + [y/4] + [13*(M+1) / 5] + d - 1,
可以看出它們的形式非常相似,區別僅僅是幾個常數的不同。
儘管現在中國已經不用乾支紀日了,但有時還是需要計算日乾支的。比如,曆法有所謂“三伏”和“入梅”“出梅”,都和日乾支有關。三伏包括初伏、中伏和末伏,是指夏天最熱的一段時間,入梅和出梅是指江南一帶梅雨季節的開始和結束,本來是和氣候有關的用語。但因為古代沒有準確的天氣預報,無法準確預測三伏和入出梅的時間,所以就在曆書上硬性規定幾個日子作為三伏開始和入出梅的日子,這樣確定一個大致的日期以備參考。現在雖然有了比較準確的天氣預報,但三伏和入出梅作為一種傳統曆法,仍然流傳下來。
曆法規定夏至之後的第三個庚日為初伏開始,共十天;第四個庚日為中伏開始,十天或二十天;立秋之後的第一個庚日為末伏開始,共十天。中伏的長度之所以不固定,是因為夏至、立秋的日期和庚日的日期是逐年浮動的,立秋之後的第一個庚日可能是夏至之後的第五個庚日,也可能是第六個庚日。如果是前者,中伏就只有十天;如果是後者,中伏就長達二十天。注意如果夏至當天是庚日,夏至之後第一個庚日是指夏至之後第十天,而不是夏至當天,這時初伏第一天就是夏至之後第三十天。同樣,如果立秋當天是庚日,末伏第一天就是立秋之後第十天,而不是立秋當天。入梅則是指芒種之後的第一個丙日,出梅是指小暑之後的第一個未日,也有同樣的規定。
知道了這些,我們可以算一下2004年的初伏、中伏和末伏都是什麼日子。這需要先知道夏至和立秋的日子。如果知道夏至是6月21日,立秋是8月7日,那么運用公式(8),夏至這天的g為:
g = 4 * 20 + [20/4] + 5*4 + [4/4] + [3*(6+1) / 5] + 21 - 3
= 80 + 5 + 20 + 1 + 4 + 21 - 3
= 128,
個位數是8,天干是辛。夏至之後第三個庚日就是夏至之後第29天,也就是7月20日,這天也就是初伏第一天。中伏第一天則是7月30日。同樣可算出立秋這天的g為:
g = 4 * 20 + [20/4] + 5*4 + [4/4] + [3*(8+1) / 5] + 7 - 3
= 80 + 5 + 20 + 1 + 5 + 7 - 3
= 115,
是個戊日。立秋之後第一個庚日就是立秋之後第2天,也即8月9日,這天就是末伏第一天。由此也可知,2004年的中伏只有十天。同樣可以由芒種和小暑兩節氣的日期,算出2004年的入梅日和出梅日分別是6月6日和7月15日。
年份日期求算
反過來,知道了年乾支和日乾支,求相應的年份和日期就相對麻煩一點了。因為乾支是循環使用的,所以必須先知道欲求對應年份和日期的乾支是屬於哪一次循環。比如我們預先用公式(2)算出來1864、1924、1984年都是甲子年,如果要知道戊戌變法是哪一年,首先要確定它是十九世紀末的事情,也即是屬於1864年開始的這一個循環里。那么,我們用公式(1)可以算出來戊戌的序號是35,於是戊戌年就是(1864-1)+35=1898年。之所以要先減一,是因為甲子的序號為1,需要把這個序號先減去。
至於日乾支,因為古書里的日乾支總是和年、月配合使用的,所以不難確定它屬於哪個循環。比如《明史·莊烈帝本紀》記載明崇禎皇帝朱由檢在煤山自縊的日子是崇禎十六年三月丁未。崇禎十六年就是公元1644年。三月雖然是農曆的三月,但我們知道農曆的日期在公曆里雖然是浮動的,但也不出一定的範圍,比如農曆三月初一,總是在公曆3月22日到4月19日之間浮動。因此,先來算1644年3月22日的乾支。有:
g = 4 * 16 + [16/4] + 5 * 44 + [44/4] + [3*(3+1) / 5] + 22 - 3
= 64 + 4 + 220 + 11 + 2 + 22 - 3
= 320,
個位數是0,
z = g + 4C + 10
= 320 + 64 + 10
= 394,
除以12餘10,所以這一天的乾支是癸酉,其序號為6*0-5*10+60=10。而丁未的序號是6*4-5*8+60=44,在癸未之後34天,因此三月丁未肯定是3月22日之後34天,即4月25日。這就是說,崇禎自縊的日子是1644年4月25日,這和查萬年曆的結果是一致的。
乾支與公曆換算
從已知的公曆年份計算乾支紀年:年份數減3,除以10的餘數是天干,除以12的餘數是地支。
從已知日期計算乾支紀日的公式為:
g = 4C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d - 3
z = 8C + [C / 4] + 5y + [y / 4] + [3 * (M + 1) / 5] + d + 7 + i
其中奇數月i=0,偶數月i=6,C是世紀數減一,y是年份後兩位,M是月份,d是日數。1月和2月按上一年的13月和14月來算。[ ]表示取整。g除以10的餘數是天干,z除以10的餘數是地支。
換算實例
例一:1996年1月16日
(96×5+96÷4+9+16)÷60=8餘49,49即為六十甲子序數。9對應天干壬,49除12餘1對應地支子,對應乾支為“壬子”。
例二:1997年2月16日
(97×5+97÷4+9+16+30+2)÷60=9餘26,26即為六十甲子序數。6對應天干己,26除12餘2對應地支醜,對應乾支為“己丑”。
例三:1998年3月16日
(98×5+98÷4+9+16)÷60=8餘59,對應乾支為“壬戌”。
例四:1999年4月16日
(99×5+99÷4+9+16+30+1)÷60=9餘35,對應乾支為“戊戌”。
例五:2000年7月16日
(100×5+100÷4+9+16+2)÷60=9餘12,對應乾支為“乙亥”。
例六:20001年10月16日
(101×5+101÷4+9+16+4+30)÷60=9餘49,對應乾支為“壬子”。