农历算法

转自:http://topic.csdn.net/t/20020905/09/997609.html

中国农历的算法归纳如下:

1、我国的农历是一种阴阳历1912年以前用。

2、我国的农历强调逐年逐月推算。通过逐月推算后才知道某年某月是大月还 是小月;通过逐年推算后,才知道某年是闰年还是平年。

3、我国传统历法一直是阴阳历和二十四气并行,二十四气适用于农业生产。

4、我国传统历法采用干支循环(六十甲子)为周期的纪时制度。

历日的推算有两条原则:

1、以月相定日序。即以日月合朔的日期和时刻来定每月的初一。

例如,如果今天6时5 分是日月合朔的时刻,则今天是初一。如果第二个 日月合朔落在第30天,那么该月是小月(29天);如果落在第31天,那么 该月是大月(30天);

2、以中气定月序。 我国的旧历把全年分二十四个节气,其中单数的叫节气,双数的叫中气。 以雨水所在的月为正月;以春分所在的月为定为二月;以此类推。

规定,平年有十二个月,闰年有十三个月,在没有中气的历月叫闰月, 把闰月看成是前一月的重复,月序同上一月。

关于节气与阳历(公历)的关系:

节气是按太阳黄经来划分的,在地球绕太阳转的每15度为一个节气,所以 节气与公历的日期是相对较固定的,每个公历平年的节气位置是固定的;而公历的闰年的节气比平年的节气的位置要前一日。如2000年(闰)其冬至 12月21日,而2001年(平)的冬至是22日的。

实现:

1、公历中二十四节气很简单,

2、农历要找到一个基准日(日月合朔的日期),才可按逐年逐月推算出日序 与月序;闰年与闰月。

3、再根据干支循环(六十甲子)定年就容易了。

 

以下转自:http://www.baidu.com/s?tn=baiduhome_pg&bs=%C5%A9%C0%FA%B4%F3%D0%A1%D4%C2&f=8&rsv_bp=1&rsv_spt=1&wd=%C5%A9%C0%FA%BC%C6%CB%E3&inputT=3880

农历的年、月、日是按照公式计算而来的,不像西历时强行规定哪月是大月,哪月是小月。要计算大小月、平闰年、闰月放在什么位置,都要按照公式来。下面我们来给出计算的公式。
年份的计算
1 由西元年份推算天干地支:   

  农历年份数减3,除以 10 的余数是天干,除以12 的余数是地支。 例如:(2010 - 3) mod 10 = 7,所以天干是“庚” (2010 - 3) mod 12 = 3,所以地支是“寅”。   

2.积日的计算(用于月份的计算):   

  当年的1月0日换算为积日,可以用年份减去1900得到的年数被4整除,所得商数作为 y(D4),余数作为y(M4),y(M4)为零的年份是公历闰年,积日是

D(1) = 1461 * y(D4) - 1 ,y(M4)不为零的年份是公历平年,积日是D(1) = 1461 * y(D4) + 365 * y(M4)

月份的确定
  计算前一年冬至的积日F(0),并用F(0)计算冬至所在的朔月m及其朔日M(0),就可以推算冬至的农历日期,冬至所在的农历月份总是十一月。计算下一个中气F(1)和下一个朔日M(1),如果F(1)<M(1),那么该月就是上一个月的闰月,并把这个中气作为F(2),以后的中气、朔日和农历月份也这样确定。
朔日的计算(确定大小月)
  从1900年开始的第m个朔日的公式是   M = 1.6 + 29.5306 * m + 0.4 * sin(1 - 0.45058 * m)   这个公式的误差在0.2天左右。
节气的计算(确定闰月)
  先给节气进行编号,从近日点开始的第一个节气编为0,编号如下及其相应的月份如下:   

0 小寒腊月 6 清明三月 12 小暑六月 18 寒露九月   

1.大寒腊月 7 谷雨三月 13 大暑六月 19 霜降九月   

2.立春正月 8 立夏四月 14 立秋七月 20 立冬十月   

3.雨水正月 9 小满四月 15 处暑七月 21 小雪十月   

4.惊蛰二月 10 芒种五月 16 白露八月 22 大雪冬月   

5.春分二月 11 夏至五月 17 秋分八月 23 冬至冬月   

  把当天和1900年1月0日(星期日)的差称为积日,那么第y年(1900年算第0年)第x 个节气的积日是 F = 365.242 * y + 6.2 + 15.22 * x - 1.9 * sin(0.262 * x)   这个公式的误差在0.05天左右。

 

注:经过我的个人验证,公式 F = 365.242 * y + 6.2 + 15.22 * x - 1.9 * sin(0.262 * x) 的参数改为

 F = 365.242 * y + 6.18799 + 15.22567* x - 1.9 * sin(0.2618 * x) 似乎好些。

posted @ 2011-12-29 13:47  木lin木  阅读(16237)  评论(1编辑  收藏  举报