Java農曆公曆轉換

早前需要在Java上用到農曆公曆互相轉換,但在網上找了好些別人寫的library,要不就是只能做到公曆轉農曆,要不就是會計錯了農曆閏月部份。
最後在 中国阴历与阳历的转换实现【java实现】 這一個網頁上找到了一個能計算農曆閏月部份並互相轉換的source code。
但我在使用時測試過,以香港天文台的 公曆與農曆日期對照表對照 後發覺有些日子會轉換錯誤,e.g: 1990-06-23 <-> 閏五月初一。
所以我把那網頁的source code修改了一下修正了問題。
後來亦參考了 1900年至2100年公历、农历互转Js代码 而加入了一些年份數據,令它支援到1900至2099年之間的計算。

註:這程式只能支援換算以下日期:

 

  • 農曆轉公曆: 農曆一九零零(庚子)年一月初一農曆二零九九(己未)年十二月三十日之間。
  • 公曆轉農曆: 公曆1900年1月31日公曆2099年12月31日之間。

 

Code repository:

https://bitbucket.org/Airic/lunarutil

 

更新日誌:

  • 2017-10-13-v1.3.1:
    • 修正2017年農曆閏六月三十日無法轉成公曆8月21日的bug。
  • 2016-04-21-v1.3:
    • Format code,加入Unit test。
  • 2016-02-05-v1.2:
    • 修正2033置閏問題。
    • 加入2050-2099的年份資料以支援該年份計算。
  • 2014-12-29 – v1.1:
    • 用上了 Joda-Time 去修正了一些因為timezone而出現的bug。
    • 加入了兩個新method:
      • Lunar getPrevLunar(int year, int month, int day, boolean isLeap)
        輸入農曆日期,輸出前一天的農曆日期
      • Lunar getNextLunar(int year, int month, int day, boolean isLeap)
        輸入農曆日期,輸出後一天的農曆日期
  • 2014-12-27 – v1.0: 最初版本

(最後更新日期:2017-10-13)

如找到有bug,請email到 airic.yu@gmail.com 告訴我。