NuGet 套件

Ozakboy.TaiwanKit.Ganzhi.NET — 農曆/節氣/干支轉換套件

農曆互轉、二十四節氣精確到分、干支四柱、生肖與農曆節日的 .NET 套件,涵蓋 1901~2100,天文計算並經多來源驗證。

Ozakboy.TaiwanKit 系列套件之一——曆法轉換的 .NET 函式庫,也是系列中技術最複雜的一個。

相關連結

dotnet add package Ozakboy.TaiwanKit.Ganzhi.NET

專案背景

農曆與節氣的計算對正確性要求極高——轉換錯一天就是嚴重 bug,而節氣的月干支歸屬更要精確到「分」。本套件以微軟 BCL 的農曆核心搭配自建的天文級節氣表,把國曆↔農曆、二十四節氣、干支四柱、生肖與農曆節日整合成一致的 API,涵蓋 1901~2100 兩百年。

主要功能

國曆 ↔ 農曆互轉

閏月以 IsLeapMonth 明確表示(避開 BCL 閏月序號位移的坑),不存在的日期以 TryToSolar 優雅拒絕,並提供 GetLeapMonth 查詢。

二十四節氣(精確到分)

交接時刻為台灣時間 UTC+8,精確到分。

干支四柱與生肖

年柱界線可選立春精確時刻(命理慣例,預設)或正月初一(民俗慣例);月柱依節氣精確時刻切換(五虎遁),日柱以兩個獨立公認錨點互證,時柱含 23:00 晚子時規則。

農曆節日

除夕、春節、元宵、端午、七夕、中元、中秋、重陽、臘八與冬至;正確處理臘八一年兩次或零次的特例。

技術架構

  • 節氣表天文計算:以全精度 VSOP87D 星曆 + IAU1980 章動主項 + Espenak-Meeus ΔT 離線計算 200 年 × 24 節氣,捨入到分
  • 多來源驗證:與 USNO 二分二至時刻(2000 年 4/4 全中)、紫金山天文台來源(2025 年 3/3 全中)、2026 年全 24 節氣多來源交叉(24/24)比對
  • 農曆核心:包裝微軟 BCL ChineseLunisolarCalendar,免自建曆法資料的正確性風險
  • 多框架netstandard2.0 / netstandard2.1 / net8.0 / net9.0 / net10.0,零執行期依賴
  • 品質保證:96 項 xUnit 測試(含閏月、節氣交接日、四柱邊界、roundtrip 全區間抽樣)
  • 雙語文件:README 與線上文件皆中英雙語,介紹網站以 Nuxt 4 靜態產生、部署於 GitHub Pages

功能亮點

  • 國曆↔農曆互轉(1901~2100),閏月明確表示、不存在日期以 TryToSolar 處理
  • 二十四節氣精確到分:全精度 VSOP87D 星曆天文計算,台灣時間 UTC+8
  • 節氣資料經 USNO、紫金山天文台等多來源逐分交叉驗證
  • 干支四柱:年柱可選立春或初一界線,月柱依節氣精確時刻切換,含晚子時規則
  • 生肖查詢與農曆節日(除夕、春節、端午、中秋等,含臘八一年兩次/零次特例)
  • 零依賴、線程安全,支援五個 TargetFramework