Go也能算农历!Carbon农历、儒略、波斯、希伯来历法转换完全指南

发布时间:2026/8/25 9:15:06
Go也能算农历!Carbon农历、儒略、波斯、希伯来历法转换完全指南 Go也能算农历Carbon农历、儒略、波斯、希伯来历法转换完全指南【免费下载链接】carbonA simple, semantic and developer-friendly time package for golang项目地址: https://gitcode.com/gh_mirrors/carbon44/carbonGo 也能算农历吗答案是肯定的开源时间库CarbonGo 版日期时间处理包除了公历之外还内置了农历、儒略日、波斯历、希伯来历四种历法的完整转换能力。一个Lunar()方法就能把2026-08-24变成二〇二六年七月初十还能顺带告诉你生肖、传统节日是 Go 开发者做日历类功能的终极多历法转换指南。 为什么一个时间库要管这么多历法不同业务场景对应不同历法历法典型场景Carbon 方法农历Lunar春节排期、黄历、节日营销c.Lunar()波斯历Persian伊朗本地化、波斯新年 Nowruzc.Persian()希伯来历Hebrew犹太节日、宗教日历c.Hebrew()儒略日Julian天文观测、跨历法统一坐标c.Julian()这四套历法都独立实现统一放在calendar/目录下农历核心calendar/lunar/lunar.go波斯历核心calendar/persian/persian.go希伯来历核心calendar/hebrew/hebrew.go儒略日核心calendar/julian/julian.go对外统一 API 入口calendar.go 农历转换公历秒变腊月初五Carbon 的农历数据表覆盖了1900–2100 年每个农历年用一个 16 进制数编码大小月和闰月信息见calendar/lunar/lunar.go中的years数组所以查表又快又准。公历 → 农历拿到任意 Carbon 实例后调用Lunar()再用ToDateString()输出中文日期字符串c : carbon.Parse(2026-02-17) l : c.Lunar() fmt.Println(l.ToDateString()) // 二零二六年正月初一 fmt.Println(l.Animal()) // 马农历对象还提供了一整套开箱即用的判断方法Festival()内置春节、元宵节、端午节、七夕节、中秋节、重阳节等 12 个传统节日ToMonthString()/ToDayString()输出正月、廿一这类地道中文IsLeapYear()/IsLeapMonth()闰年、闰月判断如 2025 年有闰六月十二生肖逐一判断IsDragonYear()、IsSnakeYear()……农历 → 公历用CreateFromLunar(年, 月, 日, 是否闰月)一行搞定比如查农历八月十五中秋对应的公历日期。☀️ 波斯历精确到萨德月的伊朗本地化波斯历伊朗太阳历以春分作为新年前 6 个月每月 31 天、中间 5 个月每月 30 天、末月平年 29 天。Carbon 通过儒略日编号JDN做中转换算 leap 年判断也是靠比较相邻两个 JDN 的差值见calendar/persian/persian.go中的IsLeapYear。p : c.Persian() fmt.Println(p.Year(), p.Month(), p.Day()) fmt.Println(p.ToMonthString(persian.FaLocale)) // 波斯文月份名 fmt.Println(p.ToMonthString()) // 默认英文Farvardin...亮点是双语言月份/星期名内置EnLocaleFarvardin、Tir……和FaLocaleفروردین、تیر……两套本地化名称做伊朗、阿富汗站点时非常实用。反向转换则用CreateFromPersian(年, 月, 日)。✡️ 希伯来历19 年 7 闰的复杂历法也能算希伯来历是最烧脑的一种19 年周期里插 7 个闰月第 13 月 Adar Bet新年在秋分附近一年长度有 353/355/356/383/384/385 天六种可能还涉及 molad 延迟规则。Carbon 在calendar/hebrew/hebrew.go中按天文算法完整实现用累计朔望月数 碎片时间parts推算新年位置再处理推迟规则。你只需要h : c.Hebrew() fmt.Println(h.String()) // 如 5787-05-17 fmt.Println(h.ToMonthString(hebrew.HeLocale)) // 希伯来文月份名 fmt.Println(h.IsLeapYear()) // 19年7闰公式月份名同样支持英文Nisan、Tishri……与希伯来文ניסן、תשרי……双本地化反向转换用CreateFromHebrew(年, 月, 日)。 儒略日给时间一个天文坐标系儒略日Julian Day把时间表示为从公元前 4713 年起连续累计的天数是天文与多历法换算的通用基准——Carbon 的波斯历、希伯来历内部都靠它中转。j : c.Julian() fmt.Println(j.JD()) // 儒略日如 2460332.5 fmt.Println(j.MJD()) // 修正儒略日JD - 2400000.5NewJulian会根据数值位数自动识别你传入的是 JD 还是 MJD反向转换用CreateFromJulian(2460332.5)即可还原成公历。 历法互转的核心机制理解了这一点四套历法就都通了Carbon 用一个统一的天数坐标儒略日/距 1900 年的天数偏移作为枢纽——任意历法 → 儒略日/天数偏移如农历按数据表累加大小月希伯来历用朔望月公式枢纽 → 目标历法再由整数天数反推年、月、日。所以农历 ↔ 波斯历这类看似不可能的组合也能通过公历中转轻松实现而且全部是纯 Go 实现、无第三方依赖、零网络请求。 快速上手安装只需一条命令go get github.com/dromara/carbon/v2或者把源码克隆到本地研究实现git clone https://gitcode.com/gh_mirrors/carbon44/carbon各历法的完整测试数据与用例可以参考calendar/lunar/lunar_unit_test.go农历转换用例calendar/persian/persian_unit_test.go波斯历用例calendar/hebrew/hebrew_unit_test.go希伯来历用例calendar/julian/julian_unit_test.go儒略日用例对外 API 总入口calendar.go✨ 小结Carbon 让Go 农历转换像c.Lunar().ToDateString()一样简单还附带生肖与 12 个传统节日波斯历、希伯来历均内置英/本地语言双月份名直接用于国际化儒略日提供了统一的天文时间坐标四套历法由此自由互转农历数据覆盖 1900–2100 年纯表驱动、性能稳定如果你的项目需要节日营销、国际化日历或天文时间处理Carbon 的多历法能力值得放进你的工具箱。【免费下载链接】carbonA simple, semantic and developer-friendly time package for golang项目地址: https://gitcode.com/gh_mirrors/carbon44/carbon创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考