前言
最近有一個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. 引用方便 (只需一個檔案)