前言

最近有一個side project需要轉換農曆,上網查了一下套件,發現有幾個狀況:

1. 套件有可能不正確

2. 農曆可能有不同版本

3. 農曆必須透過觀測推算,沒有固定邏輯

4. 農曆有大小月、閏月

5. 研究曆法的時間可能比寫程式的時間多


光是研究套件、確認這些細節,也是花費了一些時間

因此想把選取的套件,與測試的過程,分享給大家

3個套件介紹比較

1. github.com/nosixtools/solarlunar

官方說明支持年份: 1900~2049

支援 mod


2. github.com/isee15/Lunar-Solar-Calendar-Converter Golang版本

官方說明支持年份: 1900~2100

自行下載1個.go程式碼檔案即可


3. github.com/Lofanmi/chinese-calendar-golang

官方說明支持年份: 1904~2024

不支援 mod


以上3個套件,經過2000年到2100年的農曆測試後,

有幾個發現

1. 2000~2024年間,3個套件曆法結果都相同

2. 2025~2049年間,套件1出現異常,但套件2與套件3曆法結果都相同

    (套件3官方說明僅支援到2024,但實際測試居然2024年後都有許多地方運行無誤!)

3. 2050~2100年間,套件2與套件3,在 2060、2089、2097 年,都有出現不一樣的結果。

    經過「香港天文台」的「公曆與農曆對照表」,套件2在2060年是正確的,在2089、2097的結果是不匹配的

結論

最終選取的是套件2 github.com/isee15/Lunar-Solar-Calendar-Converter Golang版本

1. 官方說明支援最長 (1900~2100)

2. 實測最準確 (2000~2088)

3. 引用方便 (只需一個檔案)

參考連結

Golang 農曆套件 github.com/nosixtools/solarlunar 各種語言農曆套件 github.com/nosixtools/solarlunar Golang 農曆套件 github.com/Lofanmi/chinese-calendar-golang 香港天文台 - 公曆與農曆對照表 javascript農曆套件介紹文章
FBLINETwitterLinkIn
回部落格