農歷算法


轉自: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) 似乎好些。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM