阴历阳历转换算法
- 格式:doc
- 大小:27.50 KB
- 文档页数:7
一. 简单的历法知识
干支的推算和历法知识是密切相关的,因此大家首先应该对历法有所了解,若已具备相关知识,可跳过此部分。历法是以太阳、月亮、地球三者在运行时间上的关系,制定时间顺序的法则。现行的历法大致分为三类太阳历,太阴历,阴阳历,
1.“太阳历”就是我们所说的“阳历”,是以“回归年” (地球绕太阳运行一周的时间)为侧重点制定历法,首先规定一个“回归年”为一年,为365天,然后规定每年有12个月,1,3,5,7,8,10,12月为大月31天,其余月为30天,由于“回归年”的准确时间是365天5小时48分46秒,四年则与实际回归年差一天,因此每四年设一个“润年”366天。
2.“太阴历”并非我们所说的农历,他是以“朔望月”(月亮绕地球一周的时间)为侧重点,首先规定一个“朔望月”的时间为一个月,然后规定12个月为一年,一个“朔望月”大约为日,因此设大月为30天,小月29天,单月是大月,双月是小月。12个太阴历的月是354天,比回归年差不多短了11天。3年就短一个多月。所以使用这种历时,新年不一定在冬天过,它可以在春天过,也可以在夏天或秋天过。它的惟一好处就是阴历上的每一个日期都可以知道月亮的形状。当今世界上除了几个伊斯兰教国家因为宗教上的原因仍然使用外,其他国家一般已经废弃不用了。
3.“阴阳历”才是我们常说的农历,之所以叫“阴阳历”是因为他兼顾了“回归年”和“朔望月”两个时间特点,他同样是首先规定一个“朔望月”的时间为一个月,大月为30天,小月29天,但农历的大小月由推算决定,以“朔”(月亮不出现的日子)为每个月的初一,并使用“闰月”的办法解决太阴历的不足。为保证每月的头一天(初一)必须是朔日,就使得大小月的安排不固定,而需要通过严格的观测和计算来确定。
设置“润月”的目的是为了使m个回归年的天数与n个朔望月的天数相等,即
m×=n× (1)
这样置闰的方法可以使农历年的平均长度接近回归年,而农历中的月又有鲜明的月相特征,保持了公历和阴历两全其美的特点,也因此得名“阴阳历”。
再看,由式(1)有 m / n= / 则m、n之比为1/12、2/15……19/235
在这些分式中,分子表示回归年的数目,分母表示朔望月的数目。例如最后一个分数式 表示19个回归年中必须加7个闰月(235 - 12*19)。请看下列比较:
19个“回归年”=19×=(天)
一个“朔望月”有天,235个朔望月 = 235× =(天)
19个回归年中加7个闰月后,矛
盾消除得只差:(天)——即2小时9分多,这已经是够精确的了。
所以,农历就采用了19年加7个闰月的办法,即“十九年七闰法”,把回归年与农历年很好地协调起来,使农历的元旦(春节)总保持在冬末春初。至于如何在19年里安放这7个润月,则要根据节气。现在置闰的方法是两个冬至之间,如仅有12个月则不置闰,若有13个月即置闰。置闰的月从“冬至”开始,当出现第一个没有“中气”的月份,这个月就是闰月,其名称是在前个月的前面加一个“闰”字。
我国农历将二十四个节气分为十二个节气和十二个中气。为什末有的月会没有“中气”呢?二十四节气在农历中的日期是逐月推迟的,于是有的农历月份,中气落在月末,下个月就没有中气。 一般每过两年多就有一个没有中气的月,这正好和需要加闰月的年头相符。所以农历就规定把没有中气的那个月作为闰月。
例如2001年农历四月二十九日是中气小满,再隔一个月的初一才是下一个中气夏至,当中这一个月没有中气,就定为闰月,它跟在四月后面,所以叫闰四月。
阴阳历虽然看起来很复杂,但却使回归年,朔望月得到了完美的结合,因此自夏商代一直流传至今,“阴阳历”就是我们通常说的“农历”、“殷历”,而“阴历”则一般指“太阴历”希望大家不要搞混。
二. 干支的推算
有了历法知识推算干支只是简单的数学问题,几句话就可以解决。(以下所说日期均为农历日期)
1. 日干支的推算
日干支的推算首先要知道要推算年,正月初一的干支,由正月初一的干支推算出相关月的初一,最后再加上相应的日期数,即可得到该日干支。例如:计算2002年7月12日的干支,(1)首先要知道02年正月初一的干支是“辛亥”,“辛亥”在六十甲子的序数是48。(2)然后推算7月初一的干支:7月是单月,正月初一的干支数不加30,还是48。在7月前有三月、五月两个小月,则将正月初一的干支数减2变为46,此时的干支序数46即为7月初一的干支-----己酉(3)最后加上11即为7月12日的干支-----庚申(46+11=57)。因此如果知道每年的正月初一的干支和该年何月为小月,即可推出该年任何一日的干支。
为什末这样算能得到日的干支呢?下面我来解释一下:日干支的推算最关键的步骤是求每月的初一的干支。我们知道农历大月30天,小月29天,则由此可知两个大月一共有60天,正好是六十甲子的个数,即:如果第一个大月的初一如果是“甲子”的话,第二个大月的三十日一定是“癸亥”,第三个月的初一则一定还
是“甲子”。若是一个大月一个小月(不妨设第二个月为小月)一共有59天
,比六十甲子的个数少一个,即:如果第一个月的初一如果是“甲子”的话,第二个月的二十九日一定是“壬戌”(第二个月的初一是“甲午”,因为是前面是30天,30个甲子),第三个月的初一则一定是“癸亥”,因为是59,少了一个。由此我们则可以知道推算的原理,若想求某个月初一的干支,则只需将本年正月初一的干支减去所求日期前面的小月里缺的那些天即可,有几个小月减几天。但还要注意单双月的问题,双数月求初一干支的时候要在正月初一的干支数上加上30,单数月则不用加,原因很简单双数月的初一正好处在60甲子的中间(30),如前面说第二个月的初一是“甲午”,因为是前面是30天。2002年7月是单数月因此不加30,下面再举一个双数月的例子:
例一:2005 年4月15日
(1) 05年正月初一的干支是“甲子”,序数是1
(2) 计算4月初一的干支:
(a) 4月双数月,要在正月初一上加30,变为31(1+30),
(b) 4月前面有正月、三月两个小月,要从31中减去2,变为29,此29即为4月初一的干支序数,4月初一的干支--------壬辰
(3) 知道了4月初一的干支,只要再加上14天即为4月15日的干支数43-----丙午。
例二:2005年5月12日(计算过程中最好带着数字算)
(1) 05年正月初一的干支是“甲子”,序数是1
(2) 计算5月初一的干支:
(a) 5月是单月,正月初一的干支数不加30,还是1
(b) 5月前面有正月、三月两个小月,要从1中减去2,变为 –1
(3) 知道了5月初一的干支数,只要再加上11天即为5月12日的干支数10------癸酉
还有一种情况就是有润月,其实基本原理是一样的,也是看润月是大月还是小月,这里就不具体叙述了。以上推断需要对六十甲子的序数有所了解,最好能背下来。如果背不下来可以用下面的方法:
由于天干地支是10配12,因此干支序数的个位必为对应的天干,干支序数除以12的余数必对应地支。例如前面43,个位是3,因此天干是“丙”。43除12余7,因此地支是“午”,为丙午。
总结:只要知道某年正月初一的干支和该年何月为小月,即可推出该年任何一日的干支。例如知道05年正月初一的干支,知道05年小月为“正三五八 十腊”,就可计算出今年的日干支。 运用以上原理同样可以由阳历推出干支,只是稍有不同,有兴趣的朋友可以自己总结。
2. 月干支的推算
月的推算要比日的推算要简单的多,
根据《卜筮正宗》年上起月法口诀:
甲己之年丙作首, 乙庚之岁戊为头,
丙辛之位从庚上, 丁壬壬位顺行
流,
戊癸之年何方法, 甲寅之上好追求。
例如今年是乙酉年,根据口诀“乙庚之岁戊为头”,则今年开头为“戊寅”月,由此可继续往下推任意一月的干支。
3. 时干支的推算
首先知道日的干支,根据 日上起时法 口诀:
甲己还加甲, 乙庚丙作初,
丙辛从戊起, 丁壬庚子居,
戊癸何方法, 壬子是顺行.
例如今日是乙亥日,则由口诀“乙庚丙作初”,因此今日从“丙子”时起。
干支的推算从根本上说是简单的数学问题,因此推算方法也可能有很多。以上只是我使用的方法,算是抛砖引玉。由于时间仓促,难免有不严密、不周全的地方,还请各位老师指出。
阳历日期推算阴历日期的方法:前已述及阴历日期是以月亮的圆缺为计月单位,其以逢朔为初一,以月望为十五(大月为十六日),以月晦为二十九日(大月为三十日)。然而目前记时通常用阳历日期表达,如欲将阳历日期换算成阴历日期可以用以下两种方法:其一是查《新编万年历》,如查1984年6月8日是阴历几日?翻开万年历6月10日是阴历十一,则逆推6月8日是阴历初九。其二可以利用公式推算阴历日期:
设:公元年数-1977(或1901)=4q+r
则:阴历日期=14q+(r+1)+年内日期序数
(注:式中q、r、n均为自然数,r<4)
例:1994年5月7日的阴历日期为:
1994-1977=17=4×4+1
故:q=4,r=1 则:5月7日的阴历日期为:
14×4+(1+1)+(31+28+31+31+7)
=
然后用去除得商数6......,6即是n值,余数27即是阴历二十七日。
静心池验证:q=?,r=?怎样定?