Tyme4MB - 中国传统历法计算库的 MoonBit 移植版本,支持公历、农历、藏历、回历、干支、八字、节气、神煞、宜忌等
基于 MoonBit 语言开发,编译目标为 WASM。
| 模块 | 说明 |
|---|---|
| 公历 | 格里高利历(年/月/日/时/分/秒/星期/季节/半年/周) |
| 农历 | 中国传统阴阳合历(含闰月、节气定位) |
| 回历 | 伊斯兰历法 |
| 藏历(饶迥历) | 印尼巴厘岛历法 |
| 干支 | 六十甲子循环(年/月/日/时四柱) |
| 八字 | 四柱命理(含胎元、命宫、身宫、纳音、真太阳时反推) |
| 节气 | 二十四节气精确时刻计算(基于寿星天文历算法) |
| 神煞 | 130 种吉凶神煞 |
| 宜忌 | 每日/时辰宜忌查询 |
| 童限/大运/小运 | 命理推算(支持 Default、China95、LunarSect1、LunarSect2 四种流派) |
| 星座 | 黄道十二星座 |
| 月相 | 新月/上弦月/满月/下弦月等月相计算 |
| 法定假日 | 中国法定节假日及调休安排(2001年至今) |
| 事件 | 自定义节日/事件管理与查询 |
| 其他 | 二十八星宿、九星、六曜、小六壬、灶马头、彭祖百忌、胎神等 |
# 通过 mooncakes.io 安装(发布后可用)
moon add justinwongcn/tyme4mbimport tyme.{SolarDay, LunarDay, EightChar, LunarHour}
// 1. 公历日
let solarDay = SolarDay::from_ymd(1986, 5, 29).unwrap()
println(solarDay.to_string()) // 1986年5月29日
// 2. 公历转农历
let lunarDay = solarDay.get_lunar_day()
println(lunarDay.to_string()) // 农历丙寅年四月廿一
// 3. 公历转藏历
let rabByungDay = solarDay.get_rab_byung_day()
println(rabByungDay.to_string()) // 第十七饶迥火虎年四月廿一
// 4. 公历转回历
let hijriDay = solarDay.get_hijri_day()
println(hijriDay.to_string()) // 1406年赖买丹月20日
// 5. 八字排盘
let solarTime = SolarTime::from_ymdhms(1986, 5, 29, 13, 0, 0).unwrap()
let lunarHour = solarTime.get_lunar_hour().unwrap()
let eightChar = eight_char_provider.get_eight_char(lunarHour)
println(eightChar.to_string()) // 丙寅 癸巳 癸酉 己未# 构建库
moon build
# 运行测试
moon test
# 运行示例
moon run examplestyme4mb/
├── tyme/ # 稳定的 @tyme 兼容入口
│ ├── moon.pkg # facade 包声明
│ ├── reexports.mbt # 保持原公开类型、函数和 trait 名称
│ ├── core/ # 领域实现(sealed trait 与历法类型)
│ │ ├── moon.pkg
│ │ ├── solar_*.mbt # 公历相关
│ │ ├── lunar_*.mbt # 农历相关
│ │ ├── hijri_*.mbt # 回历
│ │ ├── rab_byung_*.mbt # 藏历(饶迥历)
│ │ ├── sixty_cycle*.mbt # 六十甲子
│ │ └── *_wbtest.mbt # 包内单元测试
│ └── astronomy/ # 无领域类型依赖的纯天文算法
│ ├── moon.pkg
│ └── shou_xing_util.mbt
├── examples/ # 示例工程
├── openwiki/ # 自动生成的文档
├── .github/workflows/ # CI/CD
├── moon.mod # 模块声明
└── LICENSE # MIT 许可证# 运行全部测试
moon testTyme4MB - 中国传统历法计算库的 MoonBit 移植版本,支持公历、农历、藏历、回历、干支、八字、节气、神煞、宜忌等