一、口訣:
乘五除四九加日, 雙月間隔三十天。 一二自加整少一, 三五七八十尾前。 二、舉例說明: 例一:1996年1月16日 (96×5+96÷4+9+16)÷60=8余49,49即為六十甲子序數(shù)。9對(duì)應(yīng)天干壬,49除12余1對(duì)應(yīng)地支子,對(duì)應(yīng)干支為“壬子”。 例二:1997年2月16日 (97×5+97÷4+9+16+30+2)÷60=9余26,26即為六十甲子序數(shù)。6對(duì)應(yīng)天干己,26除12余2對(duì)應(yīng)地支丑,對(duì)應(yīng)干支為“己丑”。 例三:1998年3月16日 (98×5+98÷4+9+16)÷60=8余59,對(duì)應(yīng)干支為“壬戌”。 例四:1999年4月16日 (99×5+99÷4+9+16+30+1)÷60=9余35,對(duì)應(yīng)干支為“戊戌”。 例五:2000年7月16日 (100×5+100÷4+9+16+2)÷60=9余12,對(duì)應(yīng)干支為“乙亥”。 例六:20001年10月16日 (101×5+101÷4+9+16+4+30)÷60=9余49,對(duì)應(yīng)干支為“壬子”。 三:注解:第二句逢雙月外加30。第三句中的“整少一”,為能被4整除之年一二月份比其他三年都要少加一;第四句反映的是大月規(guī)律,3月不加,4、5月加1,6、7月加2,8月加3,9、10月加4,11、12月加5。 在介紹求年干支和日干支的公式前,先把干支的特點(diǎn)介紹一下。干支是天干和地支的組合。天干有十個(gè),即甲、乙、丙、丁、戊、己、庚、辛、壬、癸;地支有十二個(gè),即子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥。天干和地支從“甲子”開始,按順序逐一相配,各用到最后一個(gè)時(shí),再從第一個(gè)開始繼續(xù)相配,就形成了六十個(gè)干支,也稱“六十花甲子”。為什么是六十個(gè)干支呢?這個(gè)從數(shù)學(xué)上很容易回答。根據(jù)干支的構(gòu)成條件,其循環(huán)周期必然是天干數(shù)和地干數(shù)的最小公倍數(shù)。而60正是10和12的最小公倍數(shù)。
如果我們把“甲子”編為1號(hào),“乙丑”編為2號(hào),這樣編下去,就可以得到一個(gè)干支 和序號(hào)的對(duì)照表,如下: 1.甲子 2.乙丑 3.丙寅 4.丁卯 5.戊辰 6.己巳 7.庚午 8.辛未 9.壬申 10.癸酉 11.甲戌 12.乙亥 13.丙子 14.丁丑 15.戊寅 16.己卯 17.庚辰 18.辛巳 19.壬午 20.癸未 21.甲申 22.乙酉 23.丙戌 24.丁亥 25.戊子 26.己丑 27.庚寅 28.辛卯 29.壬辰 30.癸巳 31.甲午 32.乙未 33.丙申 34.丁酉 35.戊戌 36.己亥 37.庚子 38.辛丑 39.壬寅 40.癸卯 41.甲辰 42.乙巳 43.丙午 44.丁未 45.戊申 46.己酉 47.庚戌 48.辛亥 49.壬子 50.癸丑 51.甲寅 52.乙卯 53.丙辰 54.丁巳 55.戊午 56.己未 57.庚申 58.辛酉 59.壬戌 60.癸亥 細(xì)心觀察這張表,不難發(fā)現(xiàn),由序號(hào)得到對(duì)應(yīng)干支是很容易的,序號(hào)除以10的余數(shù)就是天干的序數(shù)(如果余數(shù)是0,則為最后一個(gè)天干癸),序號(hào)除以12的余數(shù)就是地支的序 數(shù)(如果余數(shù)是0,則為最后一個(gè)地支亥)。比如37號(hào)干支,因?yàn)?7 mod 10=7(mod表示取余數(shù)),對(duì)應(yīng)的天干是庚,37 mod 12=1,對(duì)應(yīng)的地支是子,所以37號(hào)干支就是庚子。顯然,一個(gè)整數(shù)除以10的余數(shù)就是它的個(gè)位數(shù),這就使求天干更方便了。 而由干支推它的序號(hào),也不困難。這其實(shí)就是一個(gè)同余方程組的求解問題,我們用初等數(shù)論中的中國剩余定理就可以解決。比如要算戊午的序號(hào)是多少,根據(jù)上面由序號(hào)得到對(duì)應(yīng)干支的原理,很容易得到如下方程組: { x mod 10 = 5 { x mod 12 = 7. 其中x是待求的干支序號(hào)。根據(jù)中國剩余定理,有: x ≡ 6 * 5 - 5 * 7 (mod 60) = 55, 即戊午的序號(hào)是55.這和上面的對(duì)照表的是一致的。一般地,若天干的序號(hào)為m,地支的序號(hào)為n,則干支的序號(hào)為: x ≡ 6m - 5n (mod 60) (1) 簡單點(diǎn)說,如果6m-5n的結(jié)果是正數(shù),這個(gè)數(shù)就是干支的序號(hào);如果是負(fù)數(shù),把它加上60就是干支的序號(hào)。 了解了干支及其序號(hào)的相互推算,下面我們先來介紹年干支的求算。需要說明的是,干支紀(jì)年紀(jì)的是農(nóng)歷年,而不是公歷年。但因?yàn)檗r(nóng)歷年的歲首和公歷年的歲首相隔較近,使農(nóng)歷年總是和某一公歷年的大部分重合,因此,通常也用公歷年的年份表示和它大部分重合的農(nóng)歷年。這樣我們就很容易給出農(nóng)歷年的干支序號(hào)為: x = (Y-3) mod 60, (2) 其中Y是年份。得到了干支序號(hào)x,就可以求出相應(yīng)的干支來。比如2004年的干支序號(hào): x = (2004-3) mod 60 = 2001 mod 60 = 21, 21 mod 10=1,天干為甲,21 mod 12=9,地支為申,因此,2004年是甲申年。 細(xì)心觀察,我們可以發(fā)現(xiàn),其實(shí)用Y-3直接除以10,就可以得到天干,用Y-3直接除以12,就可以得到地支。這是因?yàn)?nbsp; x = (Y-3) mod 60 等價(jià)于 Y-3 = 60 * n + x, 其中n是Y-3除以60的商數(shù)。等式兩邊同時(shí)除以10,余數(shù)也必然相等。而右邊第一項(xiàng)是60的倍數(shù),自然也是10的倍數(shù),能夠被10整數(shù),于是Y-3除以10的余數(shù)就必然等于x除以10的余數(shù)。 因此,其實(shí)我們完全用不著先求干支的序號(hào),而可以分別求天干和地支,合起來就是干支,這樣就減少了一步運(yùn)算。而對(duì)于年份的天干,同樣只須看末尾一位。末尾為4的年份的天干總是甲,末尾為5的年份的天干總是乙……依次類推。 再來看日干支的求算。我們可以仿照星期的求算,得到一個(gè)比較直觀的計(jì)算日干支的公式如下: G = (Y-1)*5 + [(Y-1)/4] - [(Y-1)/100] + [(Y-1)/400] + D + 15, (3) 其中Y是年份,D是累積天數(shù),[...]表示取商數(shù),也就是只取計(jì)算結(jié)果的整數(shù)部分。把G除以60,余數(shù)就是干支的序號(hào)。或者把G除以10或12,可以直接得到日天干和日地支。不過,和形式相似的求星期的公式一樣,這個(gè)公式還不夠簡煉,特別是第一項(xiàng)(Y-1)*5,在Y為四位數(shù)年份時(shí),計(jì)算出來的結(jié)果是一個(gè)較大的四位數(shù)或五位數(shù),口算很不方便。 我們用推導(dǎo)蔡勒公式的辦法,可以改進(jìn)這個(gè)公式。先來看和年份有關(guān)的部分的改進(jìn)。我們知道,按公歷的置閏規(guī)則,一個(gè)世紀(jì)的總天數(shù)可能是36524天,或36525天。如果這個(gè)世紀(jì)中末尾為00的年份是閏年,這個(gè)世紀(jì)就只有36525天;否則就只有36524天。我們不妨稱有36524天的世紀(jì)為“平世紀(jì)”,有36525天的世紀(jì)為“閏世紀(jì)”。對(duì)于平世紀(jì),因?yàn)?nbsp; 36524 mod 60 = 44, 所以,每過一個(gè)平世紀(jì),同一天的干支就向后推進(jìn)44個(gè)序號(hào)。同樣,每過一個(gè)閏世紀(jì),同一天的干支就向后推進(jìn)45個(gè)序號(hào)。這就使我們很容易得到一個(gè)計(jì)算每個(gè)世紀(jì)第一年(年份末尾為01)3月1日的公式: G = 44C + [C/4] + 15, (4) 其中C是世紀(jì)數(shù)減一。 而計(jì)算任一年3月1日的干支的公式也可以很快得到: G = 44C + [C/4] + 5(y-1) + [y/4] + 15, 即 G = 44C + [C/4] + 5y + [y/4] + 10, (5) 其中y是年份后兩位數(shù)字。 下面我們?cè)倭谐雒吭绿鞌?shù): 月 份 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月 12月 --------------------------------------------------------------------------- 天 數(shù) 31 28(29) 31 30 31 30 31 31 30 31 30 31 減30后的 剩余天數(shù) 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) (奇數(shù)月i=0,偶數(shù)月i=6), (7) 其中,D’是從3月1日開始算起的累積天數(shù),M是月份,d是日數(shù)。把(6)(7)兩式和(5)式合起來,再進(jìn)行適當(dāng)?shù)幕?,就得到了?jì)算公歷任意一天的天干和地支的公式: 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 (奇數(shù)月i=0,偶數(shù)月i=6) (9) 如果先求得了g,那么 z = g + 4C + 10 + i (奇數(shù)月i=0,偶數(shù)月i=6). (10) g的個(gè)位數(shù)就是天干序號(hào),z除以12的余數(shù)就是地支序號(hào)。這里需要再次強(qiáng)調(diào):1月和2月是當(dāng)做上一年的13月和14月來算的,因此C和y也要按上一年的年份來取值。 我們可以把(8)(9)兩式和蔡勒公式對(duì)比一下: W = -2C + [C/4] + y + [y/4] + [13*(M+1) / 5] + d - 1, 可以看出它們的形式非常相似,區(qū)別僅僅是幾個(gè)常數(shù)的不同。 盡管現(xiàn)在中國已經(jīng)不用干支紀(jì)日了,但有時(shí)還是需要計(jì)算日干支的。比如,歷法有所謂“三伏”和“入梅”“出梅”,都和日干支有關(guān)。三伏包括初伏、中伏和末伏,是指夏天最熱的一段時(shí)間,入梅和出梅是指江南一帶梅雨季節(jié)的開始和結(jié)束,本來是和氣候有關(guān)的用語。但因?yàn)楣糯鷽]有準(zhǔn)確的天氣預(yù)報(bào),無法準(zhǔn)確預(yù)測(cè)三伏和入出梅的時(shí)間,所以就在歷書上硬性規(guī)定幾個(gè)日子作為三伏開始和入出梅的日子,這樣確定一個(gè)大致的日期以備參 考?,F(xiàn)在雖然有了比較準(zhǔn)確的天氣預(yù)報(bào),但三伏和入出梅作為一種傳統(tǒng)歷法,仍然流傳下來。 歷法規(guī)定夏至之后的第三個(gè)庚日為初伏開始,共十天;第四個(gè)庚日為中伏開始,十天或二十天;立秋之后的第一個(gè)庚日為末伏開始,共十天。中伏的長度之所以不固定,是因?yàn)橄闹?、立秋的日期和庚日的日期是逐年浮?dòng)的,立秋之后的第一個(gè)庚日可能是夏至之后的第五個(gè)庚日,也可能是第六個(gè)庚日。如果是前者,中伏就只有十天;如果是后者,中伏就長達(dá)二十天。注意如果夏至當(dāng)天是庚日,夏至之后第一個(gè)庚日是指夏至之后第十天,而 不是夏至當(dāng)天,這時(shí)初伏第一天就是夏至之后第三十天。同樣,如果立秋當(dāng)天是庚日,末伏第一天就是立秋之后第十天,而不是立秋當(dāng)天。入梅則是指芒種之后的第一個(gè)丙日,出梅是指小暑之后的第一個(gè)未日,也有同樣的規(guī)定。 知道了這些,我們可以算一下2004年的初伏、中伏和末伏都是什么日子。這需要先知道夏至和立秋的日子。如果知道夏至是6月21日,立秋是8月7日,那么運(yùn)用公式(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, 個(gè)位數(shù)是8,天干是辛。夏至之后第三個(gè)庚日就是夏至之后第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, 是個(gè)戊日。立秋之后第一個(gè)庚日就是立秋之后第2天,也即8月9日,這天就是末伏第一天。由此也可知,2004年的中伏只有十天。同樣可以由芒種和小暑兩節(jié)氣的日期,算出2004年的入梅日和出梅日分別是6月6日和7月15日。 反過來,知道了年干支和日干支,求相應(yīng)的年份和日期就相對(duì)麻煩一點(diǎn)了。因?yàn)楦芍茄h(huán)使用的,所以必須先知道欲求對(duì)應(yīng)年份和日期的干支是屬于哪一次循環(huán)。比如我們預(yù)先用公式(2)算出來1864、1924、1984年都是甲子年,如果要知道戊戌變法是哪一年,首先要確定它是十九世紀(jì)末的事情,也即是屬于1864年開始的這一個(gè)循環(huán)里。那么,我們用公式(1)可以算出來戊戌的序號(hào)是35,于是戊戌年就是(1864-1)+35=1898年。之所以要先減一,是因?yàn)榧鬃拥男蛱?hào)為1,需要把這個(gè)序號(hào)先減去。 至于日干支,因?yàn)楣艜锏娜崭芍Э偸呛湍?、月配合使用的,所以不難確定它屬于哪個(gè)循環(huán)。比如《明史·莊烈帝本紀(jì)》記載明崇禎皇帝朱由檢在煤山自縊的日子是崇禎十六年三月丁未。崇禎十六年就是公元1644年。三月雖然是農(nóng)歷的三月,但我們知道農(nóng)歷的日期在公歷里雖然是浮動(dòng)的,但也不出一定的范圍,比如農(nóng)歷三月初一,總是在公歷3月22日到4月19日之間浮動(dòng)。因此,先來算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, 個(gè)位數(shù)是0, z = g + 4C + 10 = 320 + 64 + 10 = 394, 除以12余10,所以這一天的干支是癸酉,其序號(hào)為6*0-5*10+60=10。而丁未的序號(hào)是6*4-5*8+60=44,在癸未之后34天,因此三月丁未肯定是3月22日之后34天,即4月25日。這就是說,崇禎自縊的日子是1644年4月25日,這和查萬年歷的結(jié)果是一致的。 |
|