子午流注算法歸納
蘇緒林(整理)
一、干支紀(jì)時(shí)與算法
(一)基本知識
1、農(nóng)歷采用“干支紀(jì)法”紀(jì)年、紀(jì)月、紀(jì)日,干支紀(jì)年法從公元54年(東漢建武三十年)開始,公元元年是辛酉年。
2、干支60年輪回一周(天干與地支的有關(guān)知識參見附件1)。
天干共有十個(gè)(代號1-9,0),即:甲、乙、丙、丁、戊、己、庚、辛、壬、癸。
地支共有十二個(gè)(代號1-11,0),即:子、丑、寅、卯、辰、已、午、未、申、酉、戌、亥。
把每一個(gè)天干和每一個(gè)地支按一定順序一對一對地搭配起來,就成為從“甲子”到“癸亥”互不重復(fù)的六十對,稱為“六十甲子”(見表1),用來作為紀(jì)年、紀(jì)月、紀(jì)日的代號,循環(huán)使用,從不間斷,叫作“干支紀(jì)法”。它是我國古代歷法中的一項(xiàng)重大發(fā)明和創(chuàng)造。
3、屬相與干支的關(guān)系。
屬相指十二生肖,即鼠、牛、虎、兔、龍、蛇、馬、羊、猴、雞、狗、豬。生肖不知起源于何時(shí),最早見于東漢王充著的《論衡·物勢篇》中。屬相與干支間并沒有任何內(nèi)在聯(lián)系。十二生肖與十二地支,數(shù)序相同,但內(nèi)容全然不相及。我國古時(shí)用十二地支配屬十二種動(dòng)物,即子鼠、丑牛、寅虎、卯兔、辰龍、巳蛇、午馬、未羊、申猴、酉雞、戍狗、亥豬,用以紀(jì)某人出生的年份,或?qū)δ衬甑暮喎Q。如凡是“丑”年出生的就屬牛,如在2009年、1997年、1985年年出生的人都屬牛,這些年也都稱為牛年。
4、干支紀(jì)年、月、日、時(shí)知識
(1)干支紀(jì)年
用干支紀(jì)年是用農(nóng)歷,所以若用公元年數(shù)套用農(nóng)歷干支紀(jì)年時(shí)要注意,農(nóng)歷每年的年尾的日期在公歷里都是跨年的,即公歷的1月和2月的某些日期是屬于上一年農(nóng)歷的范圍。例如2009年,相應(yīng)于農(nóng)歷是己丑年,但2009年1月25日以前的日期仍是屬于農(nóng)歷戊子年的范圍,即農(nóng)歷己丑年是從2009年1月26日(春節(jié))開始的。
(2)干支紀(jì)月法
在《史記·律書》中有詳細(xì)記載,由于農(nóng)歷通常有十二個(gè)月,而地支又是十二個(gè),所以各月的紀(jì)月地支是固定的。這種以十二地支固定分配年內(nèi)各月,叫作“建”,如建子、建丑等。將各月的地支,再配上天干,就構(gòu)成了干支紀(jì)月法。在不同的朝代,年的開始月份對應(yīng)的地支也不同,有以建寅為正月的,有以建子為正月的,有以建亥為正月的。現(xiàn)今以建寅為正月,是從西漢《太初歷》開始的。查干支表,帶“寅”的干支只有五個(gè),即丙寅、戌寅、庚寅、壬寅、甲寅。如甲子年丙寅開始,二月為丁卯,……十二月為丁丑;接著是乙丑年戊寅為正月,丙寅年庚寅為正月,丁卯年壬寅為正月,戊辰年甲寅為正月。再繼續(xù)下去,己巳年又是丙寅為正月,二月為丁卯,……。所以干支紀(jì)月法以五年為一周,循環(huán)使用。
(4)干支紀(jì)時(shí)法
一是指用地支記述一晝夜之間的時(shí)段。將一晝夜劃分為12個(gè)時(shí)段(從漢開始):最初不是以地支命名,而是以下列名稱指代:夜半、雞鳴、平旦、日出、食時(shí)、隅中、日中、日昳(yi4)、晡(bu1)時(shí)、日入、黃昏、入定。公元前104年,漢武帝頒行《太初歷》之后,漸以十二地支的名稱取代上述名稱。
十二地支紀(jì)時(shí)(十二辰紀(jì)時(shí))和天象紀(jì)時(shí)及24時(shí)的對應(yīng)關(guān)系是:
24時(shí) | 23-1 | 1-3 | 3-5 | 5-7 | 7-9 | 9-11 | 11-13 | 13-15 | 15-17 | 17-19 | 19-21 | 21-23 |
地支 | 子 | 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 |
天象 | 夜半 | 雞鳴 | 平旦 | 日出 | 食時(shí) | 隅中 | 日中 | 日昳 | 日晡 | 日入 | 黃昏 | 入定 |
二是指用干支組合的60組名稱循環(huán)記述一晝夜的時(shí)間段。每5天干支紀(jì)時(shí)就要循環(huán)一周。從甲子日起,這一天干支時(shí)段的次序是,甲子、乙丑……,則次日乙丑日干支紀(jì)時(shí)應(yīng)是丙子、丁丑……,……,第5日干支紀(jì)時(shí)至癸亥終。干支循環(huán)整一周。
下一周,如接著上一循環(huán)的紀(jì)日干支說,第6日則是己巳日,紀(jì)時(shí)干支又需從甲子開始,……,第10時(shí)癸酉時(shí),干支紀(jì)時(shí)至癸亥終。
如上述10日中,天干紀(jì)日循環(huán)一次,而干支組合的60組名稱卻循環(huán)兩次。由此得出以上結(jié)論:
日天干為甲和己時(shí),則子時(shí)的天干為甲;
日天干為乙和庚時(shí),則子時(shí)的天干為丙;
日天干為丙和辛?xí)r,則子時(shí)的天干為戊;
日天干為丁和壬時(shí),則子時(shí)的天干為庚;
日天干為戊和癸時(shí),則子時(shí)的天干為壬。
整理成表如下(表2):
公式算法是在沒有已知干支參照的情況下,根據(jù)干支的循環(huán)規(guī)律用一些公式來推算。
1、計(jì)算農(nóng)歷年干支(每60年循環(huán)一次)
(3)年支數(shù)=(農(nóng)歷年數(shù)-3)÷12的余數(shù) (0作12計(jì)即亥)(公式1-3);
第一種方法用公式1-1:(2009-3)÷12的余數(shù)為26,對照表1(60甲子表)第26號為“己丑”。
第二種方法用公式1-2和1-3:(2009-3)÷10的余數(shù)為6,算出年天干為“己”;(2009-3)÷12的余數(shù)為2,算出年地支為“丑”,年干支合起來為“己丑”。
(1)農(nóng)歷月天干序數(shù)與年天干序數(shù)有關(guān)系,甲或己的年份,正月是丙寅;乙或庚之年,正月為戊寅;丙或辛之年正月為庚寅,丁或壬之年正為為壬寅,戊或癸之年正月為甲寅;依次推之。
用公式記作:月天干序數(shù)=(年天干序數(shù)×2+月數(shù))÷10取余數(shù)(公式2-1)。
(2)因每年正月為寅,故從正月至十二月的地支依次為:
月份 | 十一月 | 十二月 | 正月 | 二月 | 三月 | 四月 | 五月 | 六月 | 七月 | 八月 | 九月 | 十月 |
月支 | 子 | 丑 | 寅 | 卯 | 辰 | 巳 | 午 | 未 | 申 | 酉 | 戌 | 亥 |
用公式2-2: 月地支=(4+2)÷12得余數(shù)為6,即月地支為“巳”。
故月干支合為“丁巳”。
3、計(jì)算日干支(每60天循環(huán)一次)
日干支一般用公歷來算,主要是因?yàn)楣珰v的大、小月有規(guī)律,容易計(jì)算日數(shù)。
方法一:查到各年的元旦日干支,再算出所求日距當(dāng)年元旦的天數(shù),利用天干和地支的循環(huán)規(guī)律來求。
第一步:查出或算出當(dāng)年的元旦干支。因?yàn)槿崭芍?0天循環(huán)一次,公歷平年有365天,閏年有366天,故如果知道了某一年的元旦干支就可以推導(dǎo)出下一年元旦的干支:平年干支數(shù)加5,閏年加6。如求1980至2080年間元旦干支可用下列公式算出:
(1)設(shè)(年數(shù)-1980)÷4的商為A,余數(shù)為B(公式3-1);
(2)當(dāng)B=0時(shí),
元旦天干數(shù)=((年數(shù)-1980)×5+A)÷10取余數(shù)(公式3-2);
元旦地支數(shù)=((年數(shù)-1980)×5+A+10)÷12取余數(shù)(公式3-3);
(3)當(dāng)B≠0時(shí),
元旦天干序數(shù)=((年數(shù)-1980)×5+A+1)÷10取余數(shù)(公式3-4);
元旦地支序數(shù)=((年數(shù)-1980)×5+A+10+1)÷12取余數(shù)(公式3-5);
第二步:算出當(dāng)日距元旦天數(shù),設(shè)為C。
C=依次累加當(dāng)日前各月天數(shù)+當(dāng)日日期(公式3-6)。
第三步:算出當(dāng)日干支。
日干支的推算公式為(適用公元1年之后):
日天干序數(shù)=(元旦日天干序數(shù)+C-1)÷10取余數(shù)(公式3-7)
日地支序數(shù)=(元旦日地支序數(shù)+C-1)÷12取余數(shù)(公式3-8)
第二、三步有另外一種算法:利用循環(huán)規(guī)律,用各個(gè)月加減數(shù)算,各月加減數(shù)如下表:
月份 | 一月 | 二 月 | 三月 | 四月 | 五月 | 六月 | 七月 | 八 月 | 九月 | 十 月 | 十一月 | 十二月 |
天干 | -1 | 0 | -2 | -1 | -1 | 0 | 0 | 1 | 2 | 2 | 3 | 3 |
地支 | -1 | 0 | 10 | 5 | -1 | 6 | 0 | 7 | 2 | 8 | 3 | 9 |
閏年 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
計(jì)算公式為:
日天干序數(shù)=(元旦日天干序數(shù)+當(dāng)月天干加減數(shù)+日期數(shù)+閏年修正值)÷10取余數(shù)(公式3-7-1);
日地支序數(shù)=(元旦日天干序數(shù)+當(dāng)月天干加減數(shù)+日期數(shù)+閏年修正值)÷12取余數(shù)(公式3-8-1)
上述方法需要查出元旦干支,且所用公式繁多,故容易出錯(cuò)。
方法二:用絕對公式計(jì)算,需事先設(shè)定下列參數(shù):
C=(世紀(jì)數(shù)-1);
日天干=[4C+[C/4]+5Y+[Y/4]+[3(M+1)/5]+D-3]/10取余數(shù)(公式3-9);
日地支=[8C+[C/4]+5Y+[Y/4]+[3(M+1)/5]+D+7+I]/12取余數(shù)(公式3-10);
例3-1:求2009年1月29日的干支?
用上述方法一計(jì)算:
第一步:求2009年元旦干支:
公式3-1:(2009-1980)÷4商為7,余數(shù)為1;余數(shù)不為0;故用公式3-4和3-5計(jì)算。
2009年元旦天干=((2009-1980)×5+7+1)÷10取余數(shù)=3;
2009年元旦地支=((2009-1980)×5+7+11)÷12取余數(shù)=7;
第二步:求當(dāng)日距2009年1月1日的天數(shù)。
用公式3-6,C=29;
第三步:求2009年1月29日干支。
用公式3-7:當(dāng)日天干=(3+29-1)÷10取余數(shù)=1;或用公式3-7-1:當(dāng)日天干=(3-1+29+0)÷10取余數(shù)=1
用公式3-8:當(dāng)日地支=(7+29-1)÷12取余數(shù)=11;或用公式3-8-1:當(dāng)日地支=(7-1+29+0)÷12取余數(shù)=11。
故2009年1月29日的干支為“甲戌”。
用上述方法二計(jì)算:
C=20;Y=8;M=13;D=29;I=0;
公式3-9:日天干=[4×20+[20/4]+5×8+[8/4]+[3×(13+1)/5]+29-3]/10取余數(shù)=[80+5+40+2+8+29-3]/10取余數(shù)=1;
公式3-10:日地支=[8×20+[20/4]+5×8+[8/4]+[3×(13+1)/5]+29+7+0]/12取余數(shù)=[160+5+40+2+8+29+7+0]/12取余數(shù)=11;
故2009年1月29日的干支為“甲戌”。
(1)時(shí)地支數(shù)=([(當(dāng)時(shí)時(shí)間+1)/2]+1)/12取余數(shù)(注當(dāng)時(shí)時(shí)間取值為0-24)(公式4-1);
(2)時(shí)天干數(shù)=((日天干數(shù)-1)×2+時(shí)地支數(shù))/10取余數(shù)(公式4-2);
用公式4-1:時(shí)地支數(shù)=([(13+1)/2+1])/12取余數(shù)=8;
用公式4-2:時(shí)天干數(shù)=((1-1)×2+8)/10取余數(shù)=8;
時(shí)干支為“辛末”時(shí)。
5、子午流注用干支紀(jì)時(shí)的計(jì)算
如果需要用公歷時(shí)間來求時(shí)干支,較直接的方法是用公式3-9、3-10和公式4-1、4-2來求。
如果用計(jì)算機(jī)來管理,可事先查表將各年農(nóng)歷日期的信息存儲(chǔ)起來,再使用上述各種公式和計(jì)算機(jī)程序語言來計(jì)算年、月、日、時(shí)干支。