
不用万年历,速推日干支口诀.doc
7页不用万年历,速推日干支口诀根据公历日期计算当日干支:一、口诀:乘五除四九加日,双月间隔三十天一二自加整少一,三五七八十尾前二、举例说明:例一:1996年1月16日(96x5+96=4+9+16)=60=8余49,49即为六十甲子序数9对应天干壬,49除12余1对应地支子,对应干支为“壬子”例二:1997年2月16日(97x5+97=4+9+16+30+2)=60=9余26,26即为六十甲子序数6对应天干己,26除12余2对应地支丑,对应干支为“己丑”例三:1998年3月16日(98x5+98=4+9+16)=60=8余59,对应干支为“壬戌”例四:1999年4月16日(99x5+99=4+9+16+30+1)=60=9余35,对应干支为“戊戌”例五:2000年7月16日(100x5+100=4+9+16+2)=60=9余12,对应干支为“乙亥”例六:20001年10月16日(101x5+101=4+9+16+4+30)=60=9余49,对应干支为“壬子”三、注解:第三句中的“整少一”,为能被4整除之年一二月份比其他三年都要少加一;第四句反映的是大月规律,即8月加3、11月加5,依此类推)。
在介绍求年干支和日干支的公式前,先把干支的特点介绍一下干支是天干和地支的组合天干有十个,即甲、乙、丙、丁、戊、己、庚、辛、壬、癸;地支有十二个,即子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥天干和地支从“甲子”开始,按顺序逐一相配,各用到最后一个时,再从第一个开始继续相配,就形成了六十个干支,也称“六十花甲子”为什么是六十个干支呢?这个从数学上很容易回答根据干支的构成条件,其循环周期必然是天干数和地干数的最小公倍数而60正是10和12的最小公倍数如果我们把“甲子”编为1号,“乙丑”编为2号,这样编下去,就可以得到一个干支和序号的对照表,如下: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.癸亥细心观察这张表,不难发现,由序号得到对应干支是很容易的,序号除以10的余数就是天干的序数(如果余数是0,则为最后一个天干癸),序号除以12的余数就是地支的序数(如果余数是0则为最后一个地支亥)。
比如37号干支,因为37mod10=7(mod表示取余数),对应的天干是庚,37mod12=1,对应的地支是子,所以37号干支就是庚子显然,一个整数除以10的余数就是它的个位数,这就使求天干更方便了而由干支推它的序号,也不困难这其实就是一个同余方程组的求解问题,我们用初等数论中的中国剩余定理就可以解决比如要算戊午的序号是多少,根据上面由序号得到对应干支的原理,很容易得到如下方程组:{xmod10=5{xmod12=7.其中x是待求的干支序号根据中国剩余定理,有:x三6*5-5*7(mod60)=55,即戊午的序号是55.这和上面的对照表的是一致的一般地,若天干的序号为m,地支的序号为n则干支的序号为:x三6m-5n(mod60)(1)简单点说,如果6m-5n的结果是正数,这个数就是干支的序号;如果是负数,把它加上60就是干支的序号了解了干支及其序号的相互推算,下面我们先来介绍年干支的求算需要说明的是,干支纪年纪的是农历年,而不是公历年但因为农历年的岁首和公历年的岁首相隔较近,使农历年总是和某一公历年的大部分重合,因此,通常也用公历年的年份表示和它大部分重合的农历年这样我们就很容易给出农历年的干支序号为:x=(Y-3)mod60,(2)其中Y是年份。
得到了干支序号x,就可以求出相应的干支来比如2004年的干支序号:x=(2004-3)mod60=2001mod60=21,21mod10=1,天干为甲,21mod12=9,地支为申,因此,2004年是甲申年细心观察,我们可以发现,其实用Y-3直接除以10,就可以得到天干,用Y-3直接除以12,就可以得到地支这是因为x=(Y-3)mod60等价于Y-3=60*n+x,其中n是Y-3除以60的商数等式两边同时除以10,余数也必然相等而右边第一项是60的倍数,自然也是10的倍数,能够被10整数,于是Y-3除以10的余数就必然等于x除以10的余数因此,其实我们完全用不着先求干支的序号,而可以分别求天干和地支,合起来就是干支,这样就减少了一步运算而对于年份的天干,同样只须看末尾一位末尾为4的年份的天干总是甲,末尾为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天的世纪为“闰世纪”对于平世纪,因为36524mod60=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月天数3128(29)31303130313130313031减30后的剩余天数1-2(-1)1010110101如果把1月和2月看成是上一年的13月和14月,同样可以得到下面的式子:D'三[3*(M+1)/5]+d-2(mod10)(6)及D'三[3*(M+1)/5]+d-2+i(mod12)(奇数月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,。












