Documentation
¶
Overview ¶
Package lunar 是一个优雅、低资源消耗且高效的 Go 历法库: 公历/农历互转、干支、节气、黄历宜忌、八字命理、佛道历、法定节假日, 基于寿星天文历实时推算(非查表),无任何运行时第三方依赖。
本包是 lunar-go v1.4.6 的 v2 重构(破坏性重设计),内核(天文算法与 常量表)bit 级保留,外壳(API/并发/性能/工程化)按现代 Go 重建。
快速开始 ¶
solar := lunar.MustSolar(2020, 1, 25) // 或 NewSolar 返回 (Solar, error) lunarDay := solar.Lunar() fmt.Println(lunarDay.String()) // 二〇二〇年正月初一 fmt.Println(lunarDay.DayYi()) // [祭祀 沐浴 ...]
核心类型 ¶
- Solar:公历(值类型,48B 可比较,构造零堆分配)
- *Lunar:农历(含四柱干支/节气/黄历派生态)
- LunarYear / LunarMonth / LunarTime:年/月/时辰视图
- EightChar:八字(不可变设计,WithSect 选项替代 v1 SetSect)
- HolidayStore:法定节假日(五层架构,O(1) 查询)
- Almanac:黄历一日全景(结构化,替代字符串解析)
错误模型(零 panic 红线) ¶
可失败构造一律返回 (T, error),错误哨兵可 errors.Is 分支:
l, err := lunar.NewLunar(2020, -4, 13) // 闰四月十三
if errors.Is(err, lunar.ErrInvalidDate) { ... }
编译期常量输入可用 Must* 系列便捷构造(仅建议字面量使用)。 全部导出方法对任意输入零 panic(fuzz + 全量导出方法反射冒烟验证)。
并发语义 ¶
- Solar / Lunar / LunarYear / LunarMonth / EightChar 等值对象构造后 并发只读安全;
- 全局年表缓存读侧零锁(atomic.Pointer copy-on-write);
- HolidayStore 并发读写安全(RWMutex),Watch 轮询 goroutine 亦然;
- 唯一非并发安全点:astro.SetDeltaT 与 HolidayStore.SetMaxEntries 仅允许初始化阶段调用。
性能(对照 v1.4.6,详见 benchmark_test.go) ¶
Solar→Lunar 转换: 19.4µs → 0.18µs (年表缓存) Lunar.ToFullString: 44µs → 2.6µs (strings.Builder) 每日宜忌: 15.8µs → 0.12µs (正则消除,预解码索引) 八字反推: 1.68ms → 2.7µs 假日查询: O(15KB 串扫描) → 69ns O(1)
假日数据五层架构 ¶
Layer 1 主库内嵌基线(2001-2026,go:embed)——兜底 Layer 2 holidaydata 子模块(blank import,CalVer 发版)——年度更新主通道 Layer 3 运行时文件(LoadFile / Watch mtime 轮询)——运维侧 Layer 4 程序化 Patch(HolidayStore.Patch)——应用侧
年度更新流程:`go run ./cmd/lunarholiday scaffold 2027` 生成模板 (历法节日日期由库预填)→ 人审放假调休 → validate 校验 → PR。 详见 cmd/lunarholiday 与 .github/workflows/holiday-data.yml。
民间择吉(zeji) ¶
黄历域(宜忌/神煞/黄黑道/建除)之外,另设民间择吉规则层: FolkTaboos 禁忌速查(月破/岁破/四离四绝/杨公十三忌/三娘煞/红沙日/ 节气交接日)、HasJiShen 神煞查询(如嫁娶"不将日")、ZhiSanHe/ZhiLiuHe 地支关系、DayNaYinWuXing 纳音五行、XingJiaYue/XingJiaMonths 女命行嫁月。
流派变体层(zeji_variant.go):同一规则在不同流派、地域传承中存在 多个通行版本时,全量收录各派口径并逐条标记,不替用户裁决—— IsSuiPoByBoundary 岁破双年界(立春/初一换年)、IsYangGongJiByLeapRule 杨公忌闰月两派(随本月/闰月不忌)、IsHongShaByBase 红沙日双口径 (节气月建/农历月序)、FolkTaboosTagged/FolkTaboosGrouped 带流派 标记的聚合输出(ZejiItem.Rule/Detail/Sect/Source/Note)。 无分歧规则标记为「通行」;分歧规则各派独立判定、分别列出。
二十四山与到山层(zeji_shan.go):天星择日的二十四山体系 (ParseShan 解析「壬/壬山」双格式、ShanOpposite 到向、ShanSanHe 三合照、ShanJu 双山五行三合局)与太阳/太阴到山定局(TaiYangShan/ TaiYinShan 当日节气区间驻山、TaiYangDaoShan/TaiYinDaoShan 到山/ 到向/三合照判定、ShanInfo 综合信息)。太阳立春起壬山逆推、 太阴立春起艮山顺推(造福堂日馆/福山堂定局表交叉验证);到山为 节气区间驻留语义;吉级与用法分歧(平民用太阳到山、太阴到向凶) 以 DaoShanResult.Note 逐条标注。
分事择日评估器(zeji_zeri.go):ZeRi 按用事(口语别名或铺注键) 做多维度评估,判定依据逐条分块标记(典籍·铺注/黄黑道/建除、 民俗·禁忌、天星·到山、民俗·正冲),Verdict 仲裁规则全部透明 (诸事不宜 > 铺注忌/典籍级凶神/事件相关民俗凶 > 铺注宜 > 平)。 ZeRiScore 为现代加权评分参考模式(非典籍方法,仅适合多候选日 排序)。命理喜用神校验超出历法库边界,请用 EightChar 层实现。
干支关系(ganzhi_rel.go):GanWuHe 天干五合、ZhiLiuHai 地支六害、 ZhiSanXing 地支三刑(无恩/恃势/无礼/自刑),与 ZhiSanHe/ZhiLiuHe 配套的基础关系判定。
梅雨(meiyu.go):入梅/出梅按「节气后第 1 个某干支日」推算, MeiYu 通行口径(芒种后丙入/小暑后未出)+ MeiYuJiangNan 江南壬日系 + MeiYuMinSu 闽俗系三流派全量收录,IsMeiYuDay 当日判定。
专业时辰层(zeji_time.go):五不遇时(IsWuBuYu 时干克日干)、 日禄归时(IsRiLu 时支为日干禄位)、月将(YueJiang 中气换将)、 贵登天门时(GuiDengTianMen,协纪定例/子平变体双口径)—— 《协纪辨方书》卷七时辰神煞。
值年太岁与年三煞(taisui.go):TaiSuiDeity 六十甲子太岁星君名讳 (白云观元辰殿体系,异读 18 项 Note 保留,初一/立春双换年口径), PositionSanSha 年三煞方位(劫煞/灾煞/岁煞,《协纪辨方书》)。 Almanac 聚合 JSON 含黄历 App 标配字段(值日/日禄/空亡/阴阳贵/ 日九星/三煞/太岁/年景歌诀/十二时辰吉凶表)。
月相精确时刻(moonphase.go):NextMoonPhase/PrevMoonPhase 四相事件 (朔/上弦/望/下弦)天文精确时刻(北京时间),与朔/节气同一寿星 VSOP87D 链路;日粒度月相名见 Lunar.YueXiang。 Lunar.Times 返回当日十二时辰(v1 getTimes 对位)。
精度与支持域 ¶
- 历法推算基于寿星天文历(VSOP87D 简化黄经 + ΔT 拟合), 公历支持域约公元前 4713 年 ~ 公元 9999 年;
- 1582-10-05 ~ 14 为儒略历改革空档,构造返回 ErrJulianGap;
- 节气交接按东八区(UTC+8)。
Index ¶
- Constants
- Variables
- func GanWuHe(a, b string) (string, bool)
- func GuiShenNote(base GuiShenBase) string
- func HolidayCoverage() (from, to int)
- func MarshalHolidayFile(year int, source string, entries []Holiday) ([]byte, error)
- func ParseShan(s string) (string, bool)
- func RegisterHolidayFiles(fsys fs.FS) error
- func SetDefaultHolidayStore(s *HolidayStore)
- func ShanJu(shan string) string
- func ShanNames() []string
- func ShanOpposite(shan string) string
- func ShanSanHe(shan string) (a, b string)
- func XingJiaYue(nvZhi string) (daLi, xiaoLi []int, ok bool)
- func ZhiLiuHai(a, b string) bool
- func ZhiLiuHe(a, b string) bool
- func ZhiSanHe(a, b string) bool
- func ZhiSanXing(a, b string) string
- type Almanac
- type AlmanacTime
- type DaYun
- func (dy *DaYun) EndAge() int
- func (dy *DaYun) EndYear() int
- func (dy *DaYun) GanZhi() string
- func (dy *DaYun) Index() int
- func (dy *DaYun) LiuNian() []LiuNian
- func (dy *DaYun) LiuNianBy(n int) []LiuNian
- func (dy *DaYun) Lunar() *Lunar
- func (dy *DaYun) StartAge() int
- func (dy *DaYun) StartYear() int
- func (dy *DaYun) XiaoYun() []XiaoYun
- func (dy *DaYun) XiaoYunBy(n int) []XiaoYun
- func (dy *DaYun) Xun() string
- func (dy *DaYun) XunKong() string
- type DaoShanRelation
- type DaoShanResult
- type Date
- type EightChar
- func (ec *EightChar) Day() string
- func (ec *EightChar) DayDiShi() string
- func (ec *EightChar) DayGan() string
- func (ec *EightChar) DayGanIndex() int
- func (ec *EightChar) DayHideGan() []string
- func (ec *EightChar) DayNaYin() string
- func (ec *EightChar) DayShiShenGan() string
- func (ec *EightChar) DayShiShenZhi() []string
- func (ec *EightChar) DayWuXing() string
- func (ec *EightChar) DayXun() string
- func (ec *EightChar) DayXunKong() string
- func (ec *EightChar) DayZhi() string
- func (ec *EightChar) DayZhiIndex() int
- func (ec *EightChar) Lunar() *Lunar
- func (ec *EightChar) MingGong() string
- func (ec *EightChar) MingGongNaYin() string
- func (ec *EightChar) Month() string
- func (ec *EightChar) MonthDiShi() string
- func (ec *EightChar) MonthGan() string
- func (ec *EightChar) MonthHideGan() []string
- func (ec *EightChar) MonthNaYin() string
- func (ec *EightChar) MonthShiShenGan() string
- func (ec *EightChar) MonthShiShenZhi() []string
- func (ec *EightChar) MonthWuXing() string
- func (ec *EightChar) MonthXun() string
- func (ec *EightChar) MonthXunKong() string
- func (ec *EightChar) MonthZhi() string
- func (ec *EightChar) Sect() Sect
- func (ec *EightChar) ShenGong() string
- func (ec *EightChar) ShenGongNaYin() string
- func (ec *EightChar) String() string
- func (ec *EightChar) TaiXi() string
- func (ec *EightChar) TaiXiNaYin() string
- func (ec *EightChar) TaiYuan() string
- func (ec *EightChar) TaiYuanNaYin() string
- func (ec *EightChar) Time() string
- func (ec *EightChar) TimeDiShi() string
- func (ec *EightChar) TimeGan() string
- func (ec *EightChar) TimeHideGan() []string
- func (ec *EightChar) TimeNaYin() string
- func (ec *EightChar) TimeShiShenGan() string
- func (ec *EightChar) TimeShiShenZhi() []string
- func (ec *EightChar) TimeWuXing() string
- func (ec *EightChar) TimeXun() string
- func (ec *EightChar) TimeXunKong() string
- func (ec *EightChar) TimeZhi() string
- func (ec *EightChar) Year() string
- func (ec *EightChar) YearDiShi() string
- func (ec *EightChar) YearGan() string
- func (ec *EightChar) YearHideGan() []string
- func (ec *EightChar) YearNaYin() string
- func (ec *EightChar) YearShiShenGan() string
- func (ec *EightChar) YearShiShenZhi() []string
- func (ec *EightChar) YearWuXing() string
- func (ec *EightChar) YearXun() string
- func (ec *EightChar) YearXunKong() string
- func (ec *EightChar) YearZhi() string
- func (ec *EightChar) Yun(gender Gender) *Yun
- func (ec *EightChar) YunBySect(gender Gender, sect Sect) *Yun
- type EightCharOption
- type Foto
- func (f *Foto) Animal() string
- func (f *Foto) Day() int
- func (f *Foto) DayInChinese() string
- func (f *Foto) Festivals() []FotoFestival
- func (f *Foto) Gong() string
- func (f *Foto) IsDayYangGong() bool
- func (f *Foto) IsDayZhaiGuanYin() bool
- func (f *Foto) IsDayZhaiShuoWang() bool
- func (f *Foto) IsDayZhaiSix() bool
- func (f *Foto) IsDayZhaiTen() bool
- func (f *Foto) IsMonthZhai() bool
- func (f *Foto) Lunar() *Lunar
- func (f *Foto) Month() int
- func (f *Foto) MonthInChinese() string
- func (f *Foto) OtherFestivals() []string
- func (f *Foto) Shou() string
- func (f *Foto) String() string
- func (f *Foto) ToFullString() string
- func (f *Foto) Xiu() string
- func (f *Foto) XiuLuck() string
- func (f *Foto) XiuSong() string
- func (f *Foto) Year() int
- func (f *Foto) YearInChinese() string
- func (f *Foto) Zheng() string
- type FotoFestival
- type Fu
- type Gender
- type GuiShenBase
- type Holiday
- type HolidayStore
- func (s *HolidayStore) Coverage() (from, to int)
- func (s *HolidayStore) EmbeddedError() error
- func (s *HolidayStore) Holiday(year, month, day int) *Holiday
- func (s *HolidayStore) HolidaysByMonth(year, month int) []Holiday
- func (s *HolidayStore) HolidaysByTarget(year, month, day int) []Holiday
- func (s *HolidayStore) HolidaysByYear(year int) []Holiday
- func (s *HolidayStore) IsWorkDay(year, month, day int) bool
- func (s *HolidayStore) Len() int
- func (s *HolidayStore) LoadBytes(b []byte) error
- func (s *HolidayStore) LoadFS(fsys fs.FS) error
- func (s *HolidayStore) LoadFile(path string) error
- func (s *HolidayStore) Patch(holidays ...Holiday)
- func (s *HolidayStore) Remove(year, month, day int) bool
- func (s *HolidayStore) Watch(path string) (stop func())
- type HongShaBase
- type JieQi
- type LeapRule
- type LiuNian
- type LiuYue
- type Lunar
- func FromSolar(s Solar) *Lunar
- func FromTime(t time.Time) *Lunar
- func MustNewLunar(year, month, day int) *Lunar
- func MustNewLunarDateTime(year, month, day, hour, minute, second int) *Lunar
- func MustNewLunarTime(year, month, day, hour, minute, second int) *Lunardeprecated
- func NewLunar(year, month, day int) (*Lunar, error)
- func NewLunarDateTime(year, month, day, hour, minute, second int) (*Lunar, error)
- func (l *Lunar) Almanac() Almanac
- func (l *Lunar) Animal() string
- func (l *Lunar) BaZi() [4]string
- func (l *Lunar) BaZiNaYin() [4]string
- func (l *Lunar) BaZiShiShenGan() [4]string
- func (l *Lunar) BaZiShiShenZhi() [4]string
- func (l *Lunar) BaZiWuXing() [4]string
- func (l *Lunar) CurrentJie() *JieQi
- func (l *Lunar) CurrentJieQi() *JieQi
- func (l *Lunar) CurrentQi() *JieQi
- func (l *Lunar) Day() int
- func (l *Lunar) DayChong() string
- func (l *Lunar) DayChongDesc() string
- func (l *Lunar) DayChongGan() string
- func (l *Lunar) DayChongGanTie() string
- func (l *Lunar) DayChongShengXiao() string
- func (l *Lunar) DayGan() string
- func (l *Lunar) DayGanExact() string
- func (l *Lunar) DayGanExact2() string
- func (l *Lunar) DayGanIndex() int
- func (l *Lunar) DayGanIndexExact() int
- func (l *Lunar) DayGanIndexExact2() int
- func (l *Lunar) DayInChinese() string
- func (l *Lunar) DayInGanZhi() string
- func (l *Lunar) DayInGanZhiExact() string
- func (l *Lunar) DayInGanZhiExact2() string
- func (l *Lunar) DayJi() []string
- func (l *Lunar) DayJiBySect(sect Sect) []string
- func (l *Lunar) DayJiShen() []string
- func (l *Lunar) DayLu() string
- func (l *Lunar) DayNaYin() string
- func (l *Lunar) DayNaYinWuXing() string
- func (l *Lunar) DayNineStar() *NineStar
- func (l *Lunar) DayPositionCai() string
- func (l *Lunar) DayPositionCaiDesc() string
- func (l *Lunar) DayPositionFu() string
- func (l *Lunar) DayPositionFuBySect(sect Sect) string
- func (l *Lunar) DayPositionFuDesc() string
- func (l *Lunar) DayPositionFuDescBySect(sect Sect) string
- func (l *Lunar) DayPositionTai() string
- func (l *Lunar) DayPositionTaiSui() string
- func (l *Lunar) DayPositionTaiSuiBySect(sect Sect) string
- func (l *Lunar) DayPositionTaiSuiDesc() string
- func (l *Lunar) DayPositionTaiSuiDescBySect(sect Sect) string
- func (l *Lunar) DayPositionXi() string
- func (l *Lunar) DayPositionXiDesc() string
- func (l *Lunar) DayPositionYangGui() string
- func (l *Lunar) DayPositionYangGuiDesc() string
- func (l *Lunar) DayPositionYinGui() string
- func (l *Lunar) DayPositionYinGuiDesc() string
- func (l *Lunar) DaySha() string
- func (l *Lunar) DayShengXiao() string
- func (l *Lunar) DayTianShen() string
- func (l *Lunar) DayTianShenLuck() string
- func (l *Lunar) DayTianShenType() string
- func (l *Lunar) DayXiongSha() []string
- func (l *Lunar) DayXun() string
- func (l *Lunar) DayXunExact() string
- func (l *Lunar) DayXunExact2() string
- func (l *Lunar) DayXunKong() string
- func (l *Lunar) DayXunKongExact() string
- func (l *Lunar) DayXunKongExact2() string
- func (l *Lunar) DayYi() []string
- func (l *Lunar) DayYiBySect(sect Sect) []string
- func (l *Lunar) DayZhi() string
- func (l *Lunar) DayZhiExact() string
- func (l *Lunar) DayZhiExact2() string
- func (l *Lunar) DayZhiIndex() int
- func (l *Lunar) DayZhiIndexExact() int
- func (l *Lunar) DayZhiIndexExact2() int
- func (l *Lunar) EightChar() *EightChar
- func (l *Lunar) Festivals() []string
- func (l *Lunar) FolkTaboos() []string
- func (l *Lunar) FolkTaboosGrouped() map[string][]ZejiItem
- func (l *Lunar) FolkTaboosTagged() []ZejiItem
- func (l *Lunar) Fu() *Fu
- func (l *Lunar) Gong() string
- func (l *Lunar) GuiDengTianMen() []TianMenGui
- func (l *Lunar) GuiDengTianMenByBase(base GuiShenBase) []TianMenGui
- func (l *Lunar) HasJiShen(name string) bool
- func (l *Lunar) HasXiongSha(name string) bool
- func (l *Lunar) Hou() string
- func (l *Lunar) Hour() int
- func (l *Lunar) IsHongSha() bool
- func (l *Lunar) IsHongShaByBase(b HongShaBase) bool
- func (l *Lunar) IsJieQiDay() bool
- func (l *Lunar) IsMeiYuDay() bool
- func (l *Lunar) IsMeiYuDayByBase(base MeiYuBase) bool
- func (l *Lunar) IsSanNiangSha() bool
- func (l *Lunar) IsSuiPo() bool
- func (l *Lunar) IsSuiPoByBoundary(b YearBoundary) bool
- func (l *Lunar) IsYangGongJi() bool
- func (l *Lunar) IsYangGongJiByLeapRule(r LeapRule) bool
- func (l *Lunar) IsYuePo() bool
- func (l *Lunar) Jie() string
- func (l *Lunar) JieQi() string
- func (l *Lunar) JieQiNames() []string
- func (l *Lunar) JieQiTable() map[string]Solar
- func (l *Lunar) LiuYao() string
- func (l *Lunar) MarshalJSON() ([]byte, error)
- func (l *Lunar) MeiYu() MeiYu
- func (l *Lunar) MeiYuByBase(base MeiYuBase) MeiYu
- func (l *Lunar) Minute() int
- func (l *Lunar) Month() int
- func (l *Lunar) MonthGan() string
- func (l *Lunar) MonthGanExact() string
- func (l *Lunar) MonthGanIndex() int
- func (l *Lunar) MonthGanIndexExact() int
- func (l *Lunar) MonthInChinese() string
- func (l *Lunar) MonthInGanZhi() string
- func (l *Lunar) MonthInGanZhiExact() string
- func (l *Lunar) MonthNaYin() string
- func (l *Lunar) MonthNineStar() *NineStar
- func (l *Lunar) MonthNineStarBySect(sect Sect) *NineStar
- func (l *Lunar) MonthPositionTai() string
- func (l *Lunar) MonthPositionTaiSui() string
- func (l *Lunar) MonthPositionTaiSuiBySect(sect Sect) string
- func (l *Lunar) MonthPositionTaiSuiDesc() string
- func (l *Lunar) MonthPositionTaiSuiDescBySect(sect Sect) string
- func (l *Lunar) MonthShengXiao() string
- func (l *Lunar) MonthXun() string
- func (l *Lunar) MonthXunExact() string
- func (l *Lunar) MonthXunKong() string
- func (l *Lunar) MonthXunKongExact() string
- func (l *Lunar) MonthZhi() string
- func (l *Lunar) MonthZhiExact() string
- func (l *Lunar) MonthZhiIndex() int
- func (l *Lunar) MonthZhiIndexExact() int
- func (l *Lunar) Next(days int) *Lunar
- func (l *Lunar) NextJie() *JieQi
- func (l *Lunar) NextJieByWholeDay(wholeDay bool) *JieQi
- func (l *Lunar) NextJieQi() *JieQi
- func (l *Lunar) NextJieQiByWholeDay(wholeDay bool) *JieQi
- func (l *Lunar) NextMoonPhase() (MoonPhaseEvent, error)
- func (l *Lunar) NextQi() *JieQi
- func (l *Lunar) NextQiByWholeDay(wholeDay bool) *JieQi
- func (l *Lunar) OtherFestivals() []string
- func (l *Lunar) PengZuGan() string
- func (l *Lunar) PengZuZhi() string
- func (l *Lunar) PositionSanSha() string
- func (l *Lunar) PositionSanShaDesc() string
- func (l *Lunar) PrevJie() *JieQi
- func (l *Lunar) PrevJieByWholeDay(wholeDay bool) *JieQi
- func (l *Lunar) PrevJieQi() *JieQi
- func (l *Lunar) PrevJieQiByWholeDay(wholeDay bool) *JieQi
- func (l *Lunar) PrevMoonPhase() (MoonPhaseEvent, error)
- func (l *Lunar) PrevQi() *JieQi
- func (l *Lunar) PrevQiByWholeDay(wholeDay bool) *JieQi
- func (l *Lunar) Qi() string
- func (l *Lunar) Season() string
- func (l *Lunar) Second() int
- func (l *Lunar) ShanInfo(shan string) *ShanInfo
- func (l *Lunar) Shou() string
- func (l *Lunar) ShuJiu() *ShuJiu
- func (l *Lunar) SiLiSiJue() string
- func (l *Lunar) Solar() Solar
- func (l *Lunar) String() string
- func (l *Lunar) TaiSuiDeity() TaiSuiDeity
- func (l *Lunar) TaiSuiDeityByLiChun() TaiSuiDeity
- func (l *Lunar) TaiYangDaoShan(shan string) *DaoShanResult
- func (l *Lunar) TaiYangShan() string
- func (l *Lunar) TaiYinDaoShan(shan string) *DaoShanResult
- func (l *Lunar) TaiYinShan() string
- func (l *Lunar) TimeChong() string
- func (l *Lunar) TimeChongDesc() string
- func (l *Lunar) TimeChongGan() string
- func (l *Lunar) TimeChongGanTie() string
- func (l *Lunar) TimeChongShengXiao() string
- func (l *Lunar) TimeGan() string
- func (l *Lunar) TimeGanIndex() int
- func (l *Lunar) TimeInGanZhi() string
- func (l *Lunar) TimeJi() []string
- func (l *Lunar) TimeNaYin() string
- func (l *Lunar) TimeNineStar() *NineStar
- func (l *Lunar) TimePositionCai() string
- func (l *Lunar) TimePositionCaiDesc() string
- func (l *Lunar) TimePositionFu() string
- func (l *Lunar) TimePositionFuDesc() string
- func (l *Lunar) TimePositionXi() string
- func (l *Lunar) TimePositionXiDesc() string
- func (l *Lunar) TimePositionYangGui() string
- func (l *Lunar) TimePositionYangGuiDesc() string
- func (l *Lunar) TimePositionYinGui() string
- func (l *Lunar) TimePositionYinGuiDesc() string
- func (l *Lunar) TimeSha() string
- func (l *Lunar) TimeShengXiao() string
- func (l *Lunar) TimeTianShen() string
- func (l *Lunar) TimeTianShenLuck() string
- func (l *Lunar) TimeTianShenType() string
- func (l *Lunar) TimeXun() string
- func (l *Lunar) TimeXunKong() string
- func (l *Lunar) TimeYi() []string
- func (l *Lunar) TimeZhi() string
- func (l *Lunar) TimeZhiIndex() int
- func (l *Lunar) Times() []*LunarTime
- func (l *Lunar) ToFullString() string
- func (l *Lunar) Week() int
- func (l *Lunar) WeekInChinese() string
- func (l *Lunar) WuHou() string
- func (l *Lunar) Xiu() string
- func (l *Lunar) XiuLuck() string
- func (l *Lunar) XiuSong() string
- func (l *Lunar) Year() int
- func (l *Lunar) YearGan() string
- func (l *Lunar) YearGanByLiChun() string
- func (l *Lunar) YearGanExact() string
- func (l *Lunar) YearGanIndex() int
- func (l *Lunar) YearGanIndexByLiChun() int
- func (l *Lunar) YearGanIndexExact() int
- func (l *Lunar) YearInChinese() string
- func (l *Lunar) YearInGanZhi() string
- func (l *Lunar) YearInGanZhiByLiChun() string
- func (l *Lunar) YearInGanZhiExact() string
- func (l *Lunar) YearNaYin() string
- func (l *Lunar) YearNineStar() *NineStar
- func (l *Lunar) YearNineStarBySect(sect Sect) *NineStar
- func (l *Lunar) YearPositionTaiSui() string
- func (l *Lunar) YearPositionTaiSuiBySect(sect Sect) string
- func (l *Lunar) YearPositionTaiSuiDesc() string
- func (l *Lunar) YearPositionTaiSuiDescBySect(sect Sect) string
- func (l *Lunar) YearShengXiao() string
- func (l *Lunar) YearShengXiaoByLiChun() string
- func (l *Lunar) YearShengXiaoExact() string
- func (l *Lunar) YearXun() string
- func (l *Lunar) YearXunByLiChun() string
- func (l *Lunar) YearXunExact() string
- func (l *Lunar) YearXunKong() string
- func (l *Lunar) YearXunKongByLiChun() string
- func (l *Lunar) YearXunKongExact() string
- func (l *Lunar) YearZhi() string
- func (l *Lunar) YearZhiByLiChun() string
- func (l *Lunar) YearZhiExact() string
- func (l *Lunar) YearZhiIndex() int
- func (l *Lunar) YearZhiIndexByLiChun() int
- func (l *Lunar) YearZhiIndexExact() int
- func (l *Lunar) YueJiang() string
- func (l *Lunar) YueXiang() string
- func (l *Lunar) ZeRi(opt ZeRiOptions) *ZeRiResult
- func (l *Lunar) ZeRiScore(opt ZeRiOptions) *ZeRiScoreResult
- func (l *Lunar) Zheng() string
- func (l *Lunar) ZhiXing() string
- type LunarMonth
- func (m LunarMonth) DayCount() int
- func (m LunarMonth) FirstJulianDay() float64
- func (m LunarMonth) Gan() string
- func (m LunarMonth) GanIndex() int
- func (m LunarMonth) GanZhi() string
- func (m LunarMonth) Index() int
- func (m LunarMonth) IsLeap() bool
- func (m LunarMonth) Month() int
- func (m LunarMonth) Next(n int) *LunarMonth
- func (m LunarMonth) NineStar() *NineStar
- func (m LunarMonth) PositionCai() string
- func (m LunarMonth) PositionCaiDesc() string
- func (m LunarMonth) PositionFu() string
- func (m LunarMonth) PositionFuBySect(sect Sect) string
- func (m LunarMonth) PositionFuDesc() string
- func (m LunarMonth) PositionFuDescBySect(sect Sect) string
- func (m LunarMonth) PositionTaiSui() string
- func (m LunarMonth) PositionTaiSuiDesc() string
- func (m LunarMonth) PositionXi() string
- func (m LunarMonth) PositionXiDesc() string
- func (m LunarMonth) PositionYangGui() string
- func (m LunarMonth) PositionYangGuiDesc() string
- func (m LunarMonth) PositionYinGui() string
- func (m LunarMonth) PositionYinGuiDesc() string
- func (m LunarMonth) String() string
- func (m LunarMonth) Year() int
- func (m LunarMonth) Zhi() string
- func (m LunarMonth) ZhiIndex() int
- type LunarTime
- func (lt *LunarTime) Chong() string
- func (lt *LunarTime) ChongDesc() string
- func (lt *LunarTime) ChongGan() string
- func (lt *LunarTime) ChongGanTie() string
- func (lt *LunarTime) ChongShengXiao() string
- func (lt *LunarTime) Gan() string
- func (lt *LunarTime) GanIndex() int
- func (lt *LunarTime) GanZhi() string
- func (lt *LunarTime) IsGuiDengTianMen() bool
- func (lt *LunarTime) IsRiLu() bool
- func (lt *LunarTime) IsWuBuYu() bool
- func (lt *LunarTime) Ji() []string
- func (lt *LunarTime) MaxHm() string
- func (lt *LunarTime) MinHm() string
- func (lt *LunarTime) NaYin() string
- func (lt *LunarTime) NineStar() *NineStar
- func (lt *LunarTime) PositionCai() string
- func (lt *LunarTime) PositionCaiDesc() string
- func (lt *LunarTime) PositionFu() string
- func (lt *LunarTime) PositionFuBySect(sect Sect) string
- func (lt *LunarTime) PositionFuDesc() string
- func (lt *LunarTime) PositionFuDescBySect(sect Sect) string
- func (lt *LunarTime) PositionXi() string
- func (lt *LunarTime) PositionXiDesc() string
- func (lt *LunarTime) PositionYangGui() string
- func (lt *LunarTime) PositionYangGuiDesc() string
- func (lt *LunarTime) PositionYinGui() string
- func (lt *LunarTime) PositionYinGuiDesc() string
- func (lt *LunarTime) Sha() string
- func (lt *LunarTime) ShengXiao() string
- func (lt *LunarTime) String() string
- func (lt *LunarTime) TianShen() string
- func (lt *LunarTime) TianShenLuck() string
- func (lt *LunarTime) TianShenType() string
- func (lt *LunarTime) Xun() string
- func (lt *LunarTime) XunKong() string
- func (lt *LunarTime) Yi() []string
- func (lt *LunarTime) Zhi() string
- func (lt *LunarTime) ZhiIndex() int
- type LunarYear
- func (y *LunarYear) CaoZi() string
- func (y *LunarYear) DayCount() int
- func (y *LunarYear) DeJin() string
- func (y *LunarYear) FenBing() string
- func (y *LunarYear) Gan() string
- func (y *LunarYear) GanIndex() int
- func (y *LunarYear) GanZhi() string
- func (y *LunarYear) GengTian() string
- func (y *LunarYear) GongZhu() string
- func (y *LunarYear) HuaShou() string
- func (y *LunarYear) JiaTian() string
- func (y *LunarYear) JieQiJulianDays() []float64
- func (y *LunarYear) KanCan() string
- func (y *LunarYear) LeapMonth() int
- func (y *LunarYear) Month(month int) *LunarMonth
- func (y *LunarYear) Months() []LunarMonth
- func (y *LunarYear) MonthsInYear() []LunarMonth
- func (y *LunarYear) Next(n int) *LunarYear
- func (y *LunarYear) NineStar() *NineStar
- func (y *LunarYear) PositionCai() string
- func (y *LunarYear) PositionCaiDesc() string
- func (y *LunarYear) PositionFu() string
- func (y *LunarYear) PositionFuBySect(sect Sect) string
- func (y *LunarYear) PositionFuDesc() string
- func (y *LunarYear) PositionFuDescBySect(sect Sect) string
- func (y *LunarYear) PositionSanSha() string
- func (y *LunarYear) PositionSanShaDesc() string
- func (y *LunarYear) PositionTaiSui() string
- func (y *LunarYear) PositionTaiSuiDesc() string
- func (y *LunarYear) PositionXi() string
- func (y *LunarYear) PositionXiDesc() string
- func (y *LunarYear) PositionYangGui() string
- func (y *LunarYear) PositionYangGuiDesc() string
- func (y *LunarYear) PositionYinGui() string
- func (y *LunarYear) PositionYinGuiDesc() string
- func (y *LunarYear) QiangMi() string
- func (y *LunarYear) RenBing() string
- func (y *LunarYear) RenChu() string
- func (y *LunarYear) String() string
- func (y *LunarYear) TaiSuiDeity() TaiSuiDeity
- func (y *LunarYear) ToFullString() string
- func (y *LunarYear) TouLiang() string
- func (y *LunarYear) TuoGu() string
- func (y *LunarYear) Year() int
- func (y *LunarYear) Yuan() string
- func (y *LunarYear) Yun() string
- func (y *LunarYear) Zhi() string
- func (y *LunarYear) ZhiIndex() int
- func (y *LunarYear) ZhiShui() string
- type MeiYu
- type MeiYuBase
- type MoonPhaseEvent
- type NianJing
- type NineStar
- func (ns *NineStar) BaMenInQiMen() string
- func (ns *NineStar) Color() string
- func (ns *NineStar) Index() int
- func (ns *NineStar) LuckInQiMen() string
- func (ns *NineStar) LuckInXuanKong() string
- func (ns *NineStar) NameInBeiDou() string
- func (ns *NineStar) NameInQiMen() string
- func (ns *NineStar) NameInTaiYi() string
- func (ns *NineStar) NameInXuanKong() string
- func (ns *NineStar) Number() string
- func (ns *NineStar) Position() string
- func (ns *NineStar) PositionDesc() string
- func (ns *NineStar) SongInTaiYi() string
- func (ns *NineStar) String() string
- func (ns *NineStar) ToFullString() string
- func (ns *NineStar) TypeInTaiYi() string
- func (ns *NineStar) WuXing() string
- func (ns *NineStar) YinYangInQiMen() string
- type Sect
- type ShanInfo
- type ShuJiu
- type Solar
- func FromJulianDay(julianDay float64) (Solar, error)
- func MustSolar(year, month, day int) Solar
- func MustSolarTime(year, month, day, hour, minute, second int) Solar
- func NewSolar(year, month, day int) (Solar, error)
- func NewSolarTime(year, month, day, hour, minute, second int) (Solar, error)
- func SolarFromBaZi(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi string) ([]Solar, error)
- func SolarFromBaZiBySect(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi string, sect Sect) ([]Solar, error)
- func SolarFromBaZiBySectAndBaseYear(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi string, sect Sect, baseYear int) ([]Solar, error)
- func SolarFromTime(t time.Time) Solar
- func (s Solar) After(other Solar) bool
- func (s Solar) Before(other Solar) bool
- func (s Solar) Day() int
- func (s Solar) Festivals() []string
- func (s Solar) Format(layout string) string
- func (s Solar) FormatChinese() string
- func (s Solar) Hour() int
- func (s Solar) IsLeapYear() bool
- func (s Solar) JulianDay() float64
- func (s Solar) Lunar() *Lunar
- func (s Solar) MarshalJSON() ([]byte, error)
- func (s Solar) Minute() int
- func (s Solar) Month() int
- func (s Solar) Next(days int, onlyWorkday bool) Solar
- func (s Solar) NextDay(days int) Solar
- func (s Solar) NextHour(hours int) Solar
- func (s Solar) NextMonth(months int) Solar
- func (s Solar) NextMoonPhase() (MoonPhaseEvent, error)
- func (s Solar) NextMoonPhaseOf(phase string) (MoonPhaseEvent, error)
- func (s Solar) NextYear(years int) Solar
- func (s Solar) OtherFestivals() []string
- func (s Solar) PrevMoonPhase() (MoonPhaseEvent, error)
- func (s Solar) PrevMoonPhaseOf(phase string) (MoonPhaseEvent, error)
- func (s Solar) SalaryRate() int
- func (s Solar) Second() int
- func (s Solar) String() string
- func (s Solar) Subtract(other Solar) int
- func (s Solar) SubtractMinute(other Solar) int
- func (s Solar) ToFullString() string
- func (s Solar) ToYmdHms() string
- func (s Solar) Week() int
- func (s Solar) WeekInChinese() string
- func (s Solar) XingZuo() string
- func (s Solar) Year() int
- func (s Solar) Ymd() Date
- type SolarHalfYear
- func (h SolarHalfYear) Index() int
- func (h SolarHalfYear) Iter() iter.Seq[SolarHalfYear]
- func (h SolarHalfYear) Month() int
- func (h SolarHalfYear) Months() []SolarMonth
- func (h SolarHalfYear) Next(halfYears int) SolarHalfYear
- func (h SolarHalfYear) Seasons() []SolarSeason
- func (h SolarHalfYear) String() string
- func (h SolarHalfYear) ToFullString() string
- func (h SolarHalfYear) Year() int
- type SolarMonth
- func (m SolarMonth) Days() []Solar
- func (m SolarMonth) Iter() iter.Seq[SolarMonth]
- func (m SolarMonth) Month() int
- func (m SolarMonth) Next(months int) SolarMonth
- func (m SolarMonth) String() string
- func (m SolarMonth) ToFullString() string
- func (m SolarMonth) WeekCount(start WeekStart) int
- func (m SolarMonth) Weeks(start WeekStart) []SolarWeek
- func (m SolarMonth) Year() int
- type SolarSeason
- func (s SolarSeason) HalfYear() SolarHalfYear
- func (s SolarSeason) Index() int
- func (s SolarSeason) Iter() iter.Seq[SolarSeason]
- func (s SolarSeason) Month() int
- func (s SolarSeason) Months() []SolarMonth
- func (s SolarSeason) Next(seasons int) SolarSeason
- func (s SolarSeason) String() string
- func (s SolarSeason) ToFullString() string
- func (s SolarSeason) Year() int
- type SolarWeek
- func (w SolarWeek) Day() int
- func (w SolarWeek) Days() []Solar
- func (w SolarWeek) DaysInMonth() []Solar
- func (w SolarWeek) FirstDay() Solar
- func (w SolarWeek) FirstDayInMonth() Solar
- func (w SolarWeek) Index() int
- func (w SolarWeek) IndexInYear() int
- func (w SolarWeek) Iter() iter.Seq[SolarWeek]
- func (w SolarWeek) Month() int
- func (w SolarWeek) Next(weeks int, separateMonth bool) SolarWeek
- func (w SolarWeek) Start() WeekStart
- func (w SolarWeek) String() string
- func (w SolarWeek) ToFullString() string
- func (w SolarWeek) Year() int
- type SolarYear
- func (y SolarYear) HalfYears() []SolarHalfYear
- func (y SolarYear) Iter() iter.Seq[SolarYear]
- func (y SolarYear) Months() []SolarMonth
- func (y SolarYear) Next(years int) SolarYear
- func (y SolarYear) Seasons() []SolarSeason
- func (y SolarYear) String() string
- func (y SolarYear) ToFullString() string
- func (y SolarYear) Year() int
- type TaiSuiDeity
- type Tao
- func (t *Tao) Day() int
- func (t *Tao) DayInChinese() string
- func (t *Tao) Festivals() []TaoFestival
- func (t *Tao) IsDayAnWu() bool
- func (t *Tao) IsDayBaHui() bool
- func (t *Tao) IsDayBaJie() bool
- func (t *Tao) IsDayMingWu() bool
- func (t *Tao) IsDaySanHui() bool
- func (t *Tao) IsDaySanYuan() bool
- func (t *Tao) IsDayWu() bool
- func (t *Tao) IsDayWuLa() bool
- func (t *Tao) Lunar() *Lunar
- func (t *Tao) Month() int
- func (t *Tao) MonthInChinese() string
- func (t *Tao) String() string
- func (t *Tao) ToFullString() string
- func (t *Tao) Year() int
- func (t *Tao) YearInChinese() string
- type TaoFestival
- type TianMenGui
- type WeekStart
- type XiaoYun
- type XingJiaCategory
- type YearBoundary
- type Yun
- func (yun *Yun) DaYun() []DaYun
- func (yun *Yun) DaYunBy(n int) []DaYun
- func (yun *Yun) Gender() Gender
- func (yun *Yun) IsForward() bool
- func (yun *Yun) Lunar() *Lunar
- func (yun *Yun) StartDay() int
- func (yun *Yun) StartHour() int
- func (yun *Yun) StartMonth() int
- func (yun *Yun) StartSolar() Solar
- func (yun *Yun) StartYear() int
- type ZeRiOptions
- type ZeRiResult
- type ZeRiScoreResult
- type ZejiItem
Examples ¶
- EightChar
- EightChar.Yun
- FromTime
- HolidayStore
- HolidayStore.LoadFile
- Lunar.Almanac
- Lunar.Almanac (StandardFields)
- Lunar.DayYi
- Lunar.FolkTaboosTagged
- Lunar.GuiDengTianMen
- Lunar.GuiDengTianMenByBase
- Lunar.HasJiShen
- Lunar.IsHongShaByBase
- Lunar.IsMeiYuDay
- Lunar.JieQiTable
- Lunar.MarshalJSON
- Lunar.MeiYu
- Lunar.MeiYuByBase
- Lunar.NextMoonPhase
- Lunar.SiLiSiJue
- Lunar.TaiSuiDeity
- Lunar.TaiYangDaoShan
- Lunar.TaiYinDaoShan
- Lunar.ZeRi
- Lunar.ZeRiScore
- LunarTime.IsGuiDengTianMen
- LunarTime.IsRiLu
- LunarTime.IsWuBuYu
- LunarYear
- LunarYear.PositionSanSha
- LunarYear.TaiSuiDeity
- NewLunar
- ShanOpposite
- Solar.Lunar
- Solar.NextMoonPhase
- Solar.PrevMoonPhaseOf
- SolarFromBaZi
- SolarWeek.Iter
- XingJiaMonths
- XingJiaYue
Constants ¶
const ( MoonPhaseShuo = "朔" // 新月,月日视黄经差 0° MoonPhaseShangXian = "上弦" // 黄经差 90° MoonPhaseWang = "望" // 满月,黄经差 180° MoonPhaseXiaXian = "下弦" // 黄经差 270° )
月相四相(月日视黄经差)。日粒度的通俗月相名(新月/渐盈凸月等)见 Lunar.YueXiang, 本层为天文精确时刻(北京时间,东八区),数据链路与朔(初一)/节气同源。
const ( ZeRiYi = "宜" ZeRiJi = "忌" ZeRiPing = "平" ZeRiZhuShiBuYi = "诸事不宜" )
zeRiVerdicts Verdict 取值常量(字符串便于直接渲染)。
Variables ¶
var ErrInvalidDate = errors.New("lunar: invalid date")
ErrInvalidDate 表示公历或农历日期值域错误。 携带上下文的典型形态:fmt.Errorf("month %d: %w", m, ErrInvalidDate)
var ErrInvalidGanZhi = errors.New("lunar: invalid gan-zhi (must be one of the 60 jia-zi)")
ErrInvalidGanZhi 表示干支字符串不是有效的六十甲子。
var ErrInvalidYear = errors.New("lunar: year out of supported range")
ErrInvalidYear 表示农历年份超出支持范围(约公元前 721 年 ~ 公元 9999 年)。
var ErrJulianGap = errors.New("lunar: date falls in the Julian calendar gap (1582-10-05 .. 1582-10-14)")
ErrJulianGap 表示日期落在 1582-10-05 ~ 1582-10-14(儒略历改格里高利历的空档)。
Functions ¶
func GanWuHe ¶
GanWuHe 判断两天干是否天干五合(甲己合土、乙庚合金、丙辛合水、 丁壬合木、戊癸合火)。相合返回(所化五行, true),否则("", false)。
五合即「一阴一阳之谓道」:相隔五位的天干两两相合(甲己、乙庚、丙辛、 丁壬、戊癸),合而化土/金/水/木/火,出《素问·五运行大论》「丹天之气 经于牛女戊分……黅天之气经于心尾己分」之化运说,命理合婚与择日 「天干合」吉象即据此。参数顺序无关(甲己与己甲同判);同干不合; 任一参数非法返回("", false)。
func GuiShenNote ¶
func GuiShenNote(base GuiShenBase) string
GuiShenNote 返回贵神口径的典籍出处备注(供逐条标记渲染)。 未知口径返回空串。
func MarshalHolidayFile ¶
MarshalHolidayFile 序列化假日数据为 schema v1 JSON(缩进 2 空格,供 scaffold/人审)。
func RegisterHolidayFiles ¶
RegisterHolidayFiles 注册一个假日数据文件系统并合并进全局默认存储 (holidaydata 子模块 blank import 时调用;后注册者按日期覆盖)。 返回错误供注册方暂存诊断(holidaydata.Status() 模式),不 panic。
func SetDefaultHolidayStore ¶
func SetDefaultHolidayStore(s *HolidayStore)
SetDefaultHolidayStore 替换全局默认存储。
func ShanOpposite ¶
ShanOpposite 返回山的对冲山(到向,相距180°):壬↔丙、艮↔坤、子↔午。 非法输入返回空串。
Example ¶
二十四山:坐山解析、到向与三合照(双山五行三合局)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
shan, _ := lunar.ParseShan("壬山")
a, b := lunar.ShanSanHe(shan)
fmt.Println(shan, lunar.ShanOpposite(shan), a, b, lunar.ShanJu(shan))
}
Output: 壬 丙 乙 坤 水局(坤壬乙·申子辰)
func XingJiaYue ¶
XingJiaYue 按女命年支返回行嫁大利月与小利月(农历月序 1~12, 如 [1 7] 表示正月与七月皆大利)。闰月随本月序号。 地支非法时 ok 为 false。
大利月:宜嫁娶之月;小利月(次吉):妨媒人,无媒可成婚。
Example ¶
民间择吉:女命行嫁大小利月(口诀「正七迎鸡兔」——卯酉女正月、七月大利)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
daLi, xiaoLi, _ := lunar.XingJiaYue("卯")
fmt.Println(daLi, xiaoLi)
}
Output: [1 7] [2 8]
func ZhiLiuHai ¶
ZhiLiuHai 判断两地支是否六害(子未、丑午、寅巳、卯辰、申亥、酉戌, 双向)。六害者「六合被冲则成害」:如子丑合而午冲子,故丑午相害, 出《五行大义》引《神白经》「害者,妨也,不合之义」;命理以六害主 亲人不利、彼此妨害,与六冲、三刑并论。同支或非法输入返回 false。
func ZhiSanXing ¶
ZhiSanXing 判断两地支是否相刑,返回刑名,不相刑返回空串:
无恩之刑:寅刑巳、巳刑申、申刑寅(《阴符经》「恩生于害」之义;
组内任意两支相见即为刑,寅巳、巳申、寅申皆同判)
恃势之刑:丑刑戌、戌刑未、未刑丑(组内任意两支相见即为刑)
无礼之刑:子刑卯、卯刑子(子卯相刑,双向)
自刑:辰辰、午午、酉酉、亥亥(仅同支相遇)
三刑名义出通行命书(《三命通会·论三刑》承《阴符经》《汉书》之说): 「寅巳申无恩者,以害报恩;丑戌未恃势者,以势相刑;子卯无礼者, 以无礼而刑;辰午酉亥自刑者,自寻烦恼」。本函数按典籍组内两支相见 即为刑的通行实务口径(合婚、择日两支互见即论刑);同支仅自刑四支 成立,其余同支不相刑;非法输入返回空串。
Types ¶
type Almanac ¶
type Almanac struct {
Lunar *Lunar `json:"lunar"`
Solar Solar `json:"solar"`
JieQi string `json:"jieQi"` // 当日节气(无则空)
Yi []string `json:"yi"` // 宜
Ji []string `json:"ji"` // 忌
JiShen []string `json:"jiShen"` // 吉神
XiongSha []string `json:"xiongSha"` // 凶煞
Chong string `json:"chong"` // 冲(如 "(壬子)鼠")
Sha string `json:"sha"` // 煞方位
Xiu string `json:"xiu"` // 星宿
Zheng string `json:"zheng"` // 七政
Gong string `json:"gong"` // 宫位
Shou string `json:"shou"` // 神兽
Animal string `json:"animal"` // 星宿动物
TianShen string `json:"tianShen"` // 天神
TaiShen string `json:"taiShen"` // 胎神
PengZuGan string `json:"pengZuGan"` // 彭祖百忌(干)
PengZuZhi string `json:"pengZuZhi"` // 彭祖百忌(支)
PositionXi string `json:"positionXi"` // 喜神方位
PositionFu string `json:"positionFu"` // 福神方位
PositionCai string `json:"positionCai"` // 财神方位
DayNaYin string `json:"dayNaYin"` // 日纳音
ShuJiu string `json:"shuJiu,omitempty"` // 数九(非数九天为空)
Fu string `json:"fu,omitempty"` // 三伏(非三伏天为空)
Hou string `json:"hou"` // 候
WuHou string `json:"wuHou"` // 物候
LiuYao string `json:"liuYao"` // 六曜
YueXiang string `json:"yueXiang"` // 月相
ZhiXing string `json:"zhiXing"` // 值日建除十二神(建/除/…/闭)
DayLu string `json:"dayLu"` // 日禄(如 "酉命互禄")
XunKongYear string `json:"xunKongYear"` // 年柱空亡(如 "寅卯")
XunKongMonth string `json:"xunKongMonth"` // 月柱空亡
XunKongDay string `json:"xunKongDay"` // 日柱空亡
YangGui string `json:"yangGui"` // 日阳贵神方位(如 "艮",与喜/福/财方位同为单字口径)
YinGui string `json:"yinGui"` // 日阴贵神方位
DayNineStar string `json:"dayNineStar"` // 日九星(简明「数+色+五行」三字口径,如 "五黄土")
SanSha string `json:"sanSha"` // 年三煞方位说明(如 "东(寅卯辰)")
TaiSui TaiSuiDeity `json:"taiSui"` // 值年太岁星君(所在农历年,正月初一换年)
NianJing NianJing `json:"nianJing"` // 年景歌诀(所在农历年)
Times []AlmanacTime `json:"times"` // 当日时辰吉凶表(子时~亥时 12 项)
Festivals []string `json:"festivals"` // 节日
OtherFestivals []string `json:"otherFestivals"`
FolkTaboos []string `json:"folkTaboos,omitempty"` // 民俗禁忌速查(月破/岁破/四离四绝/杨公忌/三娘煞/红沙日/节气日)
FolkTaboosTagged []ZejiItem `json:"folkTaboosTagged,omitempty"` // 全流派逐条标记版(含分歧口径与典籍出处)
TaiYangShan string `json:"taiYangShan,omitempty"` // 当日节气区间太阳所在山(二十四山,修造坐山适配)
TaiYinShan string `json:"taiYinShan,omitempty"` // 当日节气区间太阴所在山
Holiday *Holiday `json:"holiday,omitempty"` // 法定假日(无则省略)
SalaryRate int `json:"salaryRate"` // 工资倍率 1/2/3
}
Almanac 为黄历一日全景(计划 T1.0:替代 ToFullString 的猜测式解析, 全量信息一次取齐,API 服务刚需)。 除传统黄历域外,亦聚合黄历 App 标配字段(Task 16-b):值日建除、日禄、 年月日三柱空亡、阳贵/阴贵方位、日九星、年三煞、值年太岁名讳、年景歌诀 与当日十二时辰吉凶表。
并发语义:值语义快照,构造后只读。
type AlmanacTime ¶
type AlmanacTime struct {
Zhi string `json:"zhi"` // 时支("子"…"亥")
GanZhi string `json:"ganZhi"` // 时柱干支(如 "戊子")
TianShen string `json:"tianShen"` // 时辰天神(黄黑道神,如 "天刑")
TianShenType string `json:"tianShenType"` // 天神类型("黄道"/"黑道")
TianShenLuck string `json:"tianShenLuck"` // 天神吉凶("吉"/"凶")
Chong string `json:"chong"` // 时冲(如 "(壬午)马")
Sha string `json:"sha"` // 时煞方位
}
AlmanacTime 当日时辰吉凶表条目(Lunar.Times 子时~亥时十二项之一)。
type DaoShanRelation ¶
type DaoShanRelation string
DaoShanRelation 到山判定关系。
const ( // DaoShanNone 当日无到山关系。 DaoShanNone DaoShanRelation = "" // DaoShanArrive 到山:天体驻坐山。 DaoShanArrive DaoShanRelation = "到山" // DaoShanOpposite 到向:天体到坐山之对冲方(朝向方位)。 DaoShanOpposite DaoShanRelation = "到向" // DaoShanSanHe 三合照:天体到坐山之三合方(相距120°)。 DaoShanSanHe DaoShanRelation = "三合照" )
type DaoShanResult ¶
type DaoShanResult struct {
Shan string `json:"shan"` // 坐山
Body string `json:"body"` // 天体(太阳/太阴)
Relation DaoShanRelation `json:"relation"` // 到山/到向/三合照/空
Grade string `json:"grade,omitempty"` // 吉级(上吉/次吉/又次之/吉…)
JieQi string `json:"jieQi"` // 当日所处节气
Hits []string `json:"hits,omitempty"` // 命中的山(三合照时为具体到山之山)
Detail string `json:"detail,omitempty"` // 判定说明
Source string `json:"source"` // 典籍/通书出处
Note string `json:"note,omitempty"` // 流派差异与用法备注
}
DaoShanResult 太阳/太阴到山判定结果。
type Date ¶
Date 表示纯日期(不含时间),用于假日等按日语义的领域。 值类型:可比较、可拷贝、零堆分配。
func NewDate ¶
NewDate 校验并构造 Date;值域错误返回包装 ErrInvalidDate 的错误, 1582-10-05 ~ 14 返回包装 ErrJulianGap 的错误。
func (Date) MarshalJSON ¶
MarshalJSON 实现 Date 的 "2006-01-02" 输出。
type EightChar ¶
type EightChar struct {
// contains filtered or unexported fields
}
EightChar 表示八字(年/月/日/时四柱及其派生态)。 构造后只读,并发安全。
Example ¶
八字:不可变设计 + 流派选项。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
lunarDay := lunar.MustSolarTime(1981, 1, 29, 23, 37, 0).Lunar()
ec := lunarDay.EightChar() // 默认民间流派(晚子时日柱算当天)
fmt.Println(ec.String())
// 换流派:重新构造(不可变),而非 v1 的 SetSect 可变状态
ancient := lunar.NewEightChar(lunarDay, lunar.WithSect(lunar.SectAncient))
fmt.Println(ancient.Day())
}
Output: 庚申 己丑 丁未 壬子 戊申
func NewEightChar ¶
func NewEightChar(l *Lunar, opts ...EightCharOption) *EightChar
NewEightChar 构造八字。
func (*EightChar) DayShiShenGan ¶
DayShiShenGan 返回日干十神(日主)。
func (*EightChar) DayShiShenZhi ¶
DayShiShenZhi 返回日支十神(藏干列表)。
func (*EightChar) MonthShiShenGan ¶
MonthShiShenGan 返回月干十神。
func (*EightChar) MonthShiShenZhi ¶
MonthShiShenZhi 返回月支十神(藏干列表)。
func (*EightChar) TimeShiShenGan ¶
TimeShiShenGan 返回时干十神。
func (*EightChar) TimeShiShenZhi ¶
TimeShiShenZhi 返回时支十神(藏干列表)。
func (*EightChar) YearShiShenGan ¶
YearShiShenGan 返回年干十神。
func (*EightChar) YearShiShenZhi ¶
YearShiShenZhi 返回年支十神(藏干列表)。
func (*EightChar) Yun ¶
Yun 起大运(默认 SectAncient 按时辰起运口径,与 v1 GetYun 默认一致)。
Example ¶
大运流年。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
lunarDay := lunar.MustSolarTime(1981, 1, 29, 23, 37, 0).Lunar()
yun := lunarDay.EightChar().Yun(lunar.Female)
fmt.Println("起运:", yun.StartSolar().String())
// 大运[0] 为出生小运段(GanZhi 为空),自大运[1] 起干支顺/逆推
for _, dy := range yun.DaYun()[:3] {
if gz := dy.GanZhi(); gz != "" {
fmt.Printf("大运[%d] %d-%d %s\n", dy.Index(), dy.StartYear(), dy.EndYear(), gz)
} else {
fmt.Printf("大运[%d] %d-%d\n", dy.Index(), dy.StartYear(), dy.EndYear())
}
}
}
Output: 起运: 1989-02-18 大运[0] 1981-1988 大运[1] 1989-1998 戊子 大运[2] 1999-2008 丁亥
type Foto ¶
type Foto struct {
// contains filtered or unexported fields
}
Foto 佛历。
func MustNewFoto ¶
MustNewFoto 构造佛历日期时间,非法输入 panic。仅建议字面量常量使用。
func MustNewFotoFromYmd ¶
MustNewFotoFromYmd 构造佛历日期,非法输入 panic。仅建议字面量常量使用。
func NewFotoFromLunar ¶
NewFotoFromLunar 由农历构造佛历(lunar 为 nil 时返回 nil)。
func NewFotoFromYmd ¶
NewFotoFromYmd 构造佛历日期(零时)。
func (*Foto) Festivals ¶
func (f *Foto) Festivals() []FotoFestival
Festivals 返回当日佛历因果犯忌(闰月按同一月查表,v1 语义)。
func (*Foto) IsDayYangGong ¶
IsDayYangGong 返回是否杨公忌。 v1 此方法对 list 元素做值类型断言(实际存的是指针),节日非空即 panic; v2 值切片语义顺带修复该缺陷,语义与 v1 意图一致。
func (*Foto) IsDayZhaiShuoWang ¶
IsDayZhaiShuoWang 返回是否朔望斋(初一/十五)。
func (*Foto) IsDayZhaiSix ¶
IsDayZhaiSix 返回是否六斋日(廿八时按当月大小边界修正,v1 语义)。
func (*Foto) MonthInChinese ¶
MonthInChinese 返回中文月份(闰月带「闰」前缀)。
func (*Foto) OtherFestivals ¶
OtherFestivals 返回当日其他佛节日(菩萨圣诞等;键含闰月负号,v1 语义原样保留)。
type FotoFestival ¶
type FotoFestival struct {
// contains filtered or unexported fields
}
FotoFestival 佛历因果犯忌(值类型:小对象、构造后只读)。
func NewFotoFestival ¶
func NewFotoFestival(name, result string, everyMonth bool, remark string) FotoFestival
NewFotoFestival 构造佛历因果犯忌。
func (FotoFestival) ToFullString ¶
func (f FotoFestival) ToFullString() string
ToFullString 返回完整描述(名称 + 因果 + 备注)。
type GuiShenBase ¶
type GuiShenBase int
GuiShenBase 日干贵神(天乙贵人昼夜贵)取用口径。
const ( // GuiShenXieJi 《协纪辨方书》定例(默认):阳贵甲起未顺行 // (甲未、乙申、丙酉、丁亥、戊丑、己子、庚丑、辛寅、壬卯、癸巳), // 阴贵甲起丑逆行(甲丑、乙子、丙亥、丁酉、戊未、己申、庚未、 // 辛午、壬巳、癸卯)。通书贵登天门时定局表皆用此例。 GuiShenXieJi GuiShenBase = iota // GuiShenZiPing 子平命理通行口诀「甲戊庚牛羊,乙己鼠猴乡, // 丙丁猪鸡位,壬癸兔蛇藏,六辛逢马虎」以丑为昼贵(阳贵): // 甲戊庚阳丑阴未、乙己阳子阴申、丙丁阳亥阴酉、壬癸阳卯阴巳、 // 辛阳午阴寅。命理排盘常用;与协纪定例在甲乙丙辛癸五干上 // 昼夜互异(丁戊己庚壬五干相同)。 GuiShenZiPing )
type Holiday ¶
Holiday 描述单个假日条目。 Work=false 为放假,Work=true 为调休上班;Target 为归属节日锚点日期 (如「2026-02-28 春节调休上班」的 Target 为春节首日)。
func HolidayOfDay ¶
HolidayOfDay 查询全局默认存储中指定日期的假日(便捷函数,O(1))。
type HolidayStore ¶
type HolidayStore struct {
// contains filtered or unexported fields
}
HolidayStore 为并发安全的假日存储实例。 零值不可用,请通过 NewHolidayStore / FromScratchHolidayStore 构造。
Example ¶
法定节假日:五层架构。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
// Layer 1:主库内嵌基线(2001-2026)自动生效
h := lunar.HolidayOfDay(2025, 10, 1)
fmt.Println("2025-10-01:", h.Name, "放假:", !h.Work)
// Layer 4:程序化补丁(应用侧,最高优先级)
lunar.DefaultHolidayStore().Patch(lunar.Holiday{
Date: lunar.MustDate(2025, 10, 8),
Name: "自定义补班",
Work: true,
Target: lunar.MustDate(2025, 10, 1),
})
fmt.Println("2025-10-08 上班:", lunar.DefaultHolidayStore().IsWorkDay(2025, 10, 8))
// 覆盖区间预检(空窗期优雅降级)
from, to := lunar.HolidayCoverage()
fmt.Printf("覆盖: %d-%d\n", from, to)
}
Output: 2025-10-01: 国庆中秋 放假: true 2025-10-08 上班: true 覆盖: 2001-2026
func DefaultHolidayStore ¶
func DefaultHolidayStore() *HolidayStore
DefaultHolidayStore 返回全局默认假日存储(惰性初始化,含 Layer 1 基线)。
func FromScratchHolidayStore ¶
func FromScratchHolidayStore() *HolidayStore
FromScratchHolidayStore 创建空存储(不含内嵌基线)。
func NewHolidayStore ¶
func NewHolidayStore() *HolidayStore
NewHolidayStore 创建含 Layer 1 内嵌基线(2001 起)的默认形态存储。 若环境变量 LUNAR_HOLIDAY_FILE 指向有效文件,则额外加载(Layer 3)。
func (*HolidayStore) Coverage ¶
func (s *HolidayStore) Coverage() (from, to int)
Coverage 返回数据覆盖年份区间 [from, to];空存储返回 (0, 0)。
func (*HolidayStore) EmbeddedError ¶
func (s *HolidayStore) EmbeddedError() error
EmbeddedError 返回内嵌假日基线(Layer 1)的加载错误,正常为 nil。 用于部署环境自检:若非 nil,说明内嵌 JSON 数据损坏,库以空假日存储降级运行, 可通过 Coverage 观察到覆盖年份为空。
func (*HolidayStore) Holiday ¶
func (s *HolidayStore) Holiday(year, month, day int) *Holiday
Holiday 返回指定日期的假日条目;无则返回 nil。 未覆盖年份的优雅降级:返回零值 nil,调用方可经 Coverage 预检(计划 R10)。
func (*HolidayStore) HolidaysByMonth ¶
func (s *HolidayStore) HolidaysByMonth(year, month int) []Holiday
HolidaysByMonth 返回某年某月全部条目。
func (*HolidayStore) HolidaysByTarget ¶
func (s *HolidayStore) HolidaysByTarget(year, month, day int) []Holiday
HolidaysByTarget 返回锚点为指定日期的全部条目(该节日与其全部调休安排)。
func (*HolidayStore) HolidaysByYear ¶
func (s *HolidayStore) HolidaysByYear(year int) []Holiday
HolidaysByYear 返回某年全部条目(按日期升序)。
func (*HolidayStore) IsWorkDay ¶
func (s *HolidayStore) IsWorkDay(year, month, day int) bool
IsWorkDay 判断某日是否须上班:先查调休/假日覆盖,否则按周六周日判断。
func (*HolidayStore) LoadBytes ¶
func (s *HolidayStore) LoadBytes(b []byte) error
LoadBytes 解析并合并假日 JSON 数据(格式见 holidayJSON)。
func (*HolidayStore) LoadFS ¶
func (s *HolidayStore) LoadFS(fsys fs.FS) error
LoadFS 解析 fsys 根目录下全部 *.json 并合并(按文件名升序,后者覆盖前者)。
func (*HolidayStore) LoadFile ¶
func (s *HolidayStore) LoadFile(path string) error
LoadFile 加载运行时假日数据文件(Layer 3)。同日期条目覆盖既有数据。
Example ¶
运行时假日文件热更新(Layer 3)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
store := lunar.FromScratchHolidayStore()
// store.LoadFile("/etc/myapp/holidays.json") // 启动加载
// stop := store.Watch("/etc/myapp/holidays.json") // mtime 轮询热更新
// defer stop()
fmt.Println(store.Len())
}
Output: 0
func (*HolidayStore) Patch ¶
func (s *HolidayStore) Patch(holidays ...Holiday)
Patch 应用程序化补丁(Layer 4,最高优先级):同日期条目被覆盖。
func (*HolidayStore) Remove ¶
func (s *HolidayStore) Remove(year, month, day int) bool
Remove 删除指定日期的条目;返回是否存在。
func (*HolidayStore) Watch ¶
func (s *HolidayStore) Watch(path string) (stop func())
Watch 启动 mtime 轮询热更新(默认 1 分钟间隔,纯标准库)。 返回 stop 函数。刻意不用 fsnotify(零依赖红线,YAGNI)。
type HongShaBase ¶
type HongShaBase int
HongShaBase 红沙日取月口径。
const ( // HongShaByYueJian 按节气月建(通书正统):孟月(寅申巳亥)酉日、 // 仲月(子午卯酉)巳日、季月(辰戌丑未)丑日。 HongShaByYueJian HongShaBase = iota // HongShaByNongLi 按农历月序(民俗简便):正四七十月酉日、 // 二五八十一月巳日、三六九十二月丑日。闰月随本月序号。 HongShaByNongLi )
type Lunar ¶
type Lunar struct {
// contains filtered or unexported fields
}
Lunar 为农历日期时间(指针语义:字段重、派生态多)。 构造后只读,并发安全(计划 T3.9 文档化语义)。
func FromTime ¶
FromTime 由 time.Time 构造农历。
Example ¶
由 time.Time 构造。
package main
import (
"fmt"
"time"
"github.com/tekintian/lunar"
)
func main() {
t := time.Date(2024, 2, 10, 10, 30, 0, 0, time.UTC)
lunarDay := lunar.FromTime(t)
fmt.Println(lunarDay.String(), lunarDay.Solar().String())
}
Output: 二〇二四年正月初一 2024-02-10
func MustNewLunar ¶
MustNewLunar 构造农历日期,非法输入 panic。仅建议字面量常量使用。
func MustNewLunarDateTime ¶
MustNewLunarDateTime 构造农历日期时间,非法输入 panic。仅建议字面量常量使用。
func MustNewLunarTime
deprecated
func NewLunar ¶
NewLunar 构造农历日期(零时)。 month 为负表示闰月;月/日值域错误返回包装 ErrInvalidDate 的错误。
Example ¶
错误模型:可失败构造返回错误(零 panic)。
package main
import (
"errors"
"fmt"
"github.com/tekintian/lunar"
)
func main() {
// 闰四月合法
if l, err := lunar.NewLunar(2020, -4, 13); err == nil {
fmt.Println("2020 闰四月十三 =", l.String())
}
// 不存在的闰月报错
_, err := lunar.NewLunar(2033, -12, 1)
fmt.Println("2033 闰十二月:", errors.Is(err, lunar.ErrInvalidDate))
}
Output: 2020 闰四月十三 = 二〇二〇年闰四月十三 2033 闰十二月: true
func NewLunarDateTime ¶
NewLunarDateTime 构造农历日期时间。
func (*Lunar) Almanac ¶
Almanac 返回当日黄历全景快照。
Example ¶
结构化输出:Almanac 全景与 JSON。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
lunarDay := lunar.MustNewLunar(2019, 3, 27)
a := lunarDay.Almanac()
fmt.Println(a.Chong, a.Sha, a.PositionCai)
}
Output: (壬辰)龙 北 坎
Example (StandardFields) ¶
Almanac 标配字段:值日建除、日禄、三柱空亡、阳贵阴贵、日九星、 年三煞、值年太岁、年景歌诀与十二时辰吉凶表一次取齐。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
a := lunar.MustSolar(2025, 6, 1).Lunar().Almanac()
fmt.Println(a.ZhiXing, a.DayLu)
fmt.Println(a.XunKongYear, a.XunKongMonth, a.XunKongDay)
fmt.Println(a.YangGui, a.YinGui, a.DayNineStar)
fmt.Println(a.SanSha, a.TaiSui.String())
fmt.Println(a.NianJing.ZhiShui, a.NianJing.FenBing, a.NianJing.DeJin)
fmt.Println(len(a.Times), a.Times[2].GanZhi, a.Times[2].TianShen, a.Times[2].TianShenLuck)
}
Output: 成 酉命互禄 寅卯 申酉 辰巳 艮 离 五黄土 东(寅卯辰) 吴遂大将军 七龙治水 九人分饼 四日得金 12 庚寅 金匮 吉
func (*Lunar) BaZiShiShenZhi ¶
BaZiShiShenZhi 返回四柱地支十神(每柱取首藏干)。
func (*Lunar) DayChongShengXiao ¶
DayChongShengXiao 返回日冲生肖。
func (*Lunar) DayGanIndexExact ¶
DayGanIndexExact 返回日干序(晚子时算明天)。
func (*Lunar) DayGanIndexExact2 ¶
DayGanIndexExact2 返回日干序(晚子时算当天)。
func (*Lunar) DayInGanZhiExact ¶
DayInGanZhiExact 返回日柱干支(晚子时日柱算明天)。
func (*Lunar) DayInGanZhiExact2 ¶
DayInGanZhiExact2 返回日柱干支(晚子时日柱算当天)。
func (*Lunar) DayNaYinWuXing ¶
DayNaYinWuXing 返回日纳音五行属性(金/木/水/火/土)。 纳音名末字即五行(如「金箔金」→「金」);民间搬家选「水日」、 避「火日」等即据此判定。纳音缺失返回空串。
func (*Lunar) DayPositionCaiDesc ¶
DayPositionCaiDesc 返回日财神方位说明。
func (*Lunar) DayPositionFuBySect ¶
DayPositionFuBySect 按流派返回日福神方位。
func (*Lunar) DayPositionFuDesc ¶
DayPositionFuDesc 返回日福神方位说明。
func (*Lunar) DayPositionFuDescBySect ¶
DayPositionFuDescBySect 按流派返回日福神方位说明。
func (*Lunar) DayPositionTaiSui ¶
DayPositionTaiSui 返回日太岁方位(民间流派)。
func (*Lunar) DayPositionTaiSuiBySect ¶
DayPositionTaiSuiBySect 按流派返回日太岁方位。
func (*Lunar) DayPositionTaiSuiDesc ¶
DayPositionTaiSuiDesc 返回日太岁方位说明。
func (*Lunar) DayPositionTaiSuiDescBySect ¶
DayPositionTaiSuiDescBySect 按流派返回日太岁方位说明。
func (*Lunar) DayPositionXiDesc ¶
DayPositionXiDesc 返回日喜神方位说明。
func (*Lunar) DayPositionYangGui ¶
DayPositionYangGui 返回日阳贵方位。
func (*Lunar) DayPositionYangGuiDesc ¶
DayPositionYangGuiDesc 返回日阳贵方位说明。
func (*Lunar) DayPositionYinGui ¶
DayPositionYinGui 返回日阴贵方位。
func (*Lunar) DayPositionYinGuiDesc ¶
DayPositionYinGuiDesc 返回日阴贵方位说明。
func (*Lunar) DayTianShenType ¶
DayTianShenType 返回日天神类型(黄道/黑道)。
func (*Lunar) DayXunKongExact ¶
DayXunKongExact 返回日空亡(晚子时日柱算明天)。
func (*Lunar) DayXunKongExact2 ¶
DayXunKongExact2 返回日空亡(晚子时日柱算当天)。
func (*Lunar) DayYi ¶
DayYi 返回当日宜(默认流派一,月柱以节交接当日起算)。
Example ¶
黄历:宜忌 / 神煞 / 节气。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
lunarDay := lunar.MustNewLunar(2019, 3, 27)
fmt.Println(lunarDay.DayYi())
fmt.Println(lunarDay.DayJiShen())
fmt.Println(lunarDay.NextJieQi().Name())
}
Output: [祭祀 求医 治病 解除 馀事勿取] [天马 福生 解神] 立夏
func (*Lunar) DayZhiIndexExact ¶
DayZhiIndexExact 返回日支序(晚子时算明天)。
func (*Lunar) DayZhiIndexExact2 ¶
DayZhiIndexExact2 返回日支序(晚子时算当天)。
func (*Lunar) EightChar ¶
EightChar 返回八字号(默认民间流派;结果缓存于 Lunar 实例)。 需要其他流派视图时请使用 NewEightChar(l, WithSect(...))。
func (*Lunar) FolkTaboos ¶
FolkTaboos 返回当日触发的民间择吉禁忌列表(通行通书默认口径速查):
月破 / 岁破(立春换年)/ 四离四绝 / 杨公十三忌 / 三娘煞 / 红沙日(月建口径)/ 节气交接日
正常日返回 nil。分歧口径(岁破初一换年、杨公忌闰月不忌、红沙 农历月口径等)请用 FolkTaboosTagged / FolkTaboosGrouped(zeji_variant.go)。 此为禁忌单向速查,吉日判定请另行综合黄黑道(DayTianShen)、建除 (ZhiXing)、宜忌(DayYi/DayJi)与神煞(DayJiShen/DayXiongSha)多维信息。
func (*Lunar) FolkTaboosGrouped ¶
FolkTaboosGrouped 按流派/口径分块返回禁忌判定(分块展示便捷入口)。 map 键为 ZejiItem.Sect(「通行」「通书·立春换年」「民俗·农历月口径」等)。
func (*Lunar) FolkTaboosTagged ¶
FolkTaboosTagged 返回全流派口径下的择吉禁忌判定,逐条标记流派、 典籍出处与版本差异。分歧规则各派独立判定、分别列出;两派同判时 标记「通行」并在 Note 说明。分块展示用 FolkTaboosGrouped。
Example ¶
择吉流派:全流派标记输出。正月初一(立春前)戌日,岁破两派判定相反, 逐条标记流派、典籍出处与异派观点,由使用者按自身传承取舍。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 1, 29)
l := s.Lunar()
for _, it := range l.FolkTaboosTagged() {
fmt.Printf("[%s] %s:%s(%s)\n", it.Sect, it.Rule, it.Detail, it.Note)
}
}
Output: [通书·立春换年] 岁破:日支戌冲太岁(立春界年支辰)(民俗初一换年派(年支巳)此日非岁破)
func (*Lunar) GuiDengTianMen ¶
func (l *Lunar) GuiDengTianMen() []TianMenGui
GuiDengTianMen 返回当日的贵登天门时(默认《协纪辨方书》定例贵神, 另见 GuiDengTianMenByBase)。
贵登天门时「乃时之最吉者,能解诸凶」(《协纪辨方书》卷七引通书): 以月将加于用时时支之上起天盘,日干贵神(天乙贵人)恰临乾亥 (天门)之时辰即为贵登天门时。此时贵人居天门、六吉将得地、 六凶将敛威,故又曰「神藏煞没」,为择时第一义。推法公式:
时支序 = (月将序 + 亥序 − 贵神支序) mod 12
每日阳贵、阴贵各得一时,返回两条(GuiType "阳贵"/"阴贵"); 昼用阳贵时、夜用阴贵时(日出日落为界),昼夜取用由调用方按 用事时刻裁定。算例锚点(《协纪辨方书》卷七原文):雨水后甲日 卯时阳贵登天门、酉时阴贵登天门;大寒后甲日辰时阳贵、戌时阴贵。
Example ¶
专业时辰层:贵登天门时(月将加时、贵人临乾亥,《协纪辨方书》 卷七「择时第一义」,能解诸凶)。2025-02-24 甲子日(雨水后亥将): 阳贵卯时(昼用)、阴贵酉时(夜用)——协纪卷七原文算例。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
l := lunar.MustSolar(2025, 2, 24).Lunar()
fmt.Println("月将:", l.YueJiang())
for _, g := range l.GuiDengTianMen() {
fmt.Println(g.GuiType, g.Zhi+"时")
}
}
Output: 月将: 亥 阳贵 卯时 阴贵 酉时
func (*Lunar) GuiDengTianMenByBase ¶
func (l *Lunar) GuiDengTianMenByBase(base GuiShenBase) []TianMenGui
GuiDengTianMenByBase 按指定贵神口径返回当日的贵登天门时。 推法同 GuiDengTianMen;两口径在甲乙丙辛癸五干上结果互异, 出处备注见 GuiShenNote。月将或贵神数据异常时返回 nil (理论上不发生)。
Example ¶
专业时辰层:贵神口径变体(子平「甲戊庚牛羊」系 vs 协纪定例)。 同日甲干两系阳贵登天门时互异:协纪阳贵未得卯时,子平阳贵丑得酉时。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
l := lunar.MustSolar(2025, 2, 24).Lunar()
for _, base := range []lunar.GuiShenBase{lunar.GuiShenXieJi, lunar.GuiShenZiPing} {
g := l.GuiDengTianMenByBase(base)
fmt.Println(base, g[0].GuiType, g[0].Zhi+"时")
}
fmt.Println(lunar.GuiShenNote(lunar.GuiShenZiPing) != "")
}
Output: 0 阳贵 卯时 1 阳贵 酉时 true
func (*Lunar) HasJiShen ¶
HasJiShen 返回当日吉神是否含指定名(如 "不将"、"天德"、"月德")。 选嫁娶「不将日」即 HasJiShen("不将")。
Example ¶
民间择吉:神煞查询(选嫁娶「不将日」)与地支关系。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 1, 7)
l := s.Lunar()
fmt.Println(l.HasJiShen("不将"), l.DayNaYinWuXing())
fmt.Println(lunar.ZhiSanHe("巳", "酉"), lunar.ZhiLiuHe("巳", "申"))
}
Output: true 水 true true
func (*Lunar) HasXiongSha ¶
HasXiongSha 返回当日凶煞是否含指定名(如 "月破"、"四离"、"重日")。
func (*Lunar) IsHongShaByBase ¶
func (l *Lunar) IsHongShaByBase(b HongShaBase) bool
IsHongShaByBase 按指定取月口径判定红沙日。
口诀「四孟金鸡四仲蛇,四季逢丑是红沙」。两口径在节气与农历月 交界附近(如立春前后的农历正月/丑月)判定不同:2025 年两口径 全年分歧 19 天,首例 2025-02-01(丑月丑日)月建口径判红沙、 农历口径(正月)不判。
Example ¶
择吉流派:红沙日两口径(通书按节气月建、民俗按农历月序)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 2, 1)
l := s.Lunar()
fmt.Println(l.IsHongShaByBase(lunar.HongShaByYueJian), l.IsHongShaByBase(lunar.HongShaByNongLi))
}
Output: true false
func (*Lunar) IsJieQiDay ¶
IsJieQiDay 返回当日是否节气交接日。 民间认为节气当天气场不稳,重大事项一般避开。
func (*Lunar) IsMeiYuDay ¶
IsMeiYuDay 判断当日是否处于梅雨期内(默认通行口径): 入梅日 ≤ 当日 ≤ 出梅日(两端含,出梅日为梅雨期末日,与通书及 tyme 系口径一致)。入梅前/出梅后返回 false。其他口径见 IsMeiYuDayByBase。
Example ¶
梅雨:当日是否处于梅雨期内(入梅日 ≤ 当日 ≤ 出梅日,两端含)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
for _, d := range []int{5, 6, 13, 14} {
l := lunar.MustSolar(2025, 7, d).Lunar()
fmt.Printf("2025-07-%02d %v\n", d, l.IsMeiYuDay())
}
}
Output: 2025-07-05 true 2025-07-06 true 2025-07-13 true 2025-07-14 false
func (*Lunar) IsMeiYuDayByBase ¶
IsMeiYuDayByBase 按指定口径判断当日是否处于梅雨期内 (入梅日 ≤ 当日 ≤ 出梅日,两端含)。锚点缺失(理论不可达) 返回 false。
func (*Lunar) IsSuiPo ¶
IsSuiPo 返回当日是否岁破日(日支冲年太岁支)。 年支按民间主流的立春换年(与太岁方位 YearPositionTaiSuiBySect 同源); 岁破日诸事不宜,尤忌动土、搬迁。
func (*Lunar) IsSuiPoByBoundary ¶
func (l *Lunar) IsSuiPoByBoundary(b YearBoundary) bool
IsSuiPoByBoundary 按指定换年界限判定岁破。
立春与正月初一之间的日期(两界不同年),两派判定可能相反: 如 2025-01-29(正月初一、立春前)戌日,立春派判岁破(甲辰冲戌)、 初一派不判(乙巳冲亥);次日亥日则恰好相反。
func (*Lunar) IsYangGongJi ¶
IsYangGongJi 返回当日是否杨公十三忌(唐代杨筠松所订,百事忌)。 闰月随本月序号:闰六月初三仍按六月初三论。
func (*Lunar) IsYangGongJiByLeapRule ¶
IsYangGongJiByLeapRule 按指定闰月口径判定杨公十三忌。
如 2025 年闰六月初三(2025-07-27):随本月派判忌、闰月不忌派不判。 非闰月日期两派恒同判。
func (*Lunar) JieQiNames ¶
JieQiNames 返回节气键序列(31 键,与 JieQiTable 值平行)。
func (*Lunar) JieQiTable ¶
JieQiTable 返回节气表(键含 24 节气名与 7 个跨年键;每次调用构建新 map,可安全修改)。
Example ¶
节气表与最近节气。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
lunarDay := lunar.FromSolar(lunar.MustSolar(2024, 2, 4))
table := lunarDay.JieQiTable()
fmt.Println("立春:", table["立春"].String())
jq := lunarDay.CurrentJieQi()
fmt.Println("当日节气:", jq.Name())
}
Output: 立春: 2024-02-04 当日节气: 立春
func (*Lunar) MarshalJSON ¶
MarshalJSON 实现 Lunar 的结构化 JSON 输出(API 服务刚需,计划 T1.0)。 输出四柱/生肖/纳音/旬空/节气等核心域;完整全景请用 Almanac()。
Example ¶
package main
import (
"encoding/json"
"fmt"
"github.com/tekintian/lunar"
)
func main() {
lunarDay := lunar.MustNewLunar(2020, -4, 13)
b, _ := json.Marshal(lunarDay)
var m map[string]any
_ = json.Unmarshal(b, &m)
fmt.Println(m["month"], m["monthInChinese"], m["dayGanZhi"])
}
Output: -4 闰四 戊寅
func (*Lunar) MeiYu ¶
MeiYu 返回所在公历年的入梅/出梅日期(默认通行口径:芒种后第 1 个 丙日入梅、小暑后第 1 个未日出梅)。其他口径见 MeiYuByBase。
Example ¶
梅雨:默认通行口径(《神枢经》:芒种后第 1 个丙日入梅、小暑后第 1 个未日出梅)查询 2025 年入梅/出梅。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
l := lunar.MustSolar(2025, 8, 15).Lunar()
m := l.MeiYu()
fmt.Println(m.String())
fmt.Println(lunar.MustSolar(m.In.Year, m.In.Month, m.In.Day).Lunar().DayInGanZhi())
}
Output: 2025-06-06~2025-07-13 丙午
func (*Lunar) MeiYuByBase ¶
MeiYuByBase 按指定口径返回所在公历年的入梅/出梅日期。
「节气后第 1 个 X 日」含节气当日(芒种当日为丙日则当日入梅); 作用域为所在公历年(与农历闰月无关);Note 字段说明口径出处, 异说分歧由使用者按传承取舍。
Example ¶
梅雨:多流派口径(《江南志书》/《碎金》壬日系:芒种后壬入、夏至后庚出)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
l := lunar.MustSolar(2025, 8, 15).Lunar()
for _, base := range []lunar.MeiYuBase{
lunar.MeiYuTongXing, lunar.MeiYuJiangNan, lunar.MeiYuMinSu,
} {
m := l.MeiYuByBase(base)
fmt.Println(base, m.String())
}
}
Output: 0 2025-06-06~2025-07-13 1 2025-06-12~2025-06-30 2 2025-05-11~2025-06-12
func (*Lunar) MonthGanIndexExact ¶
MonthGanIndexExact 返回月干序(精确)。
func (*Lunar) MonthInChinese ¶
MonthInChinese 返回中文月份(闰月带「闰」前缀)。
func (*Lunar) MonthInGanZhi ¶
MonthInGanZhi 返回月柱干支(以节交接当日起算)。
func (*Lunar) MonthInGanZhiExact ¶
MonthInGanZhiExact 返回月柱干支(以节交接时刻起算)。
func (*Lunar) MonthNineStarBySect ¶
MonthNineStarBySect 按流派返回月九星。
func (*Lunar) MonthPositionTai ¶
MonthPositionTai 返回月胎神占位。
func (*Lunar) MonthPositionTaiSui ¶
MonthPositionTaiSui 返回月太岁方位(民间流派)。
func (*Lunar) MonthPositionTaiSuiBySect ¶
MonthPositionTaiSuiBySect 按流派返回月太岁方位。
func (*Lunar) MonthPositionTaiSuiDesc ¶
MonthPositionTaiSuiDesc 返回月太岁方位说明。
func (*Lunar) MonthPositionTaiSuiDescBySect ¶
MonthPositionTaiSuiDescBySect 按流派返回月太岁方位说明。
func (*Lunar) MonthXunKongExact ¶
MonthXunKongExact 返回月空亡(以节交接时刻起算)。
func (*Lunar) MonthZhiIndexExact ¶
MonthZhiIndexExact 返回月支序(精确)。
func (*Lunar) NextJieByWholeDay ¶
NextJieByWholeDay 返回下一节令(wholeDay=true 按整日比较)。
func (*Lunar) NextJieQiByWholeDay ¶
NextJieQiByWholeDay 返回下一节气(wholeDay=true 按整日比较)。
func (*Lunar) NextMoonPhase ¶
func (l *Lunar) NextMoonPhase() (MoonPhaseEvent, error)
NextMoonPhase 返回此刻之后最近的一次月相事件(代理到公历时刻)。
Example ¶
// 农历乙巳年正月初一(公历 2025-01-29)当天的朔时刻 ev, _ := MustNewLunar(2025, 1, 1).NextMoonPhase() fmt.Println(ev.Phase, ev.Solar.ToYmdHms())
Output: 朔 2025-01-29 20:35:33
func (*Lunar) NextQiByWholeDay ¶
NextQiByWholeDay 返回下一气令(wholeDay=true 按整日比较)。
func (*Lunar) OtherFestivals ¶
OtherFestivals 返回当日其他农历节日/纪念日(含寒食/春社/秋社)。
func (*Lunar) PositionSanSha ¶
PositionSanSha 返回当日所在农历年的三煞方位(代理到所在农历年)。
func (*Lunar) PositionSanShaDesc ¶
PositionSanShaDesc 返回当日所在农历年的三煞方位说明(代理到所在农历年)。
func (*Lunar) PrevJieByWholeDay ¶
PrevJieByWholeDay 返回上一节令(wholeDay=true 按整日比较)。
func (*Lunar) PrevJieQiByWholeDay ¶
PrevJieQiByWholeDay 返回上一节气(wholeDay=true 按整日比较)。
func (*Lunar) PrevMoonPhase ¶
func (l *Lunar) PrevMoonPhase() (MoonPhaseEvent, error)
PrevMoonPhase 返回此刻之前(含相等)最近的一次月相事件。
func (*Lunar) PrevQiByWholeDay ¶
PrevQiByWholeDay 返回上一气令(wholeDay=true 按整日比较)。
func (*Lunar) ShanInfo ¶
ShanInfo 返回指定坐山的综合适配信息(太阳/太阴到山到向三合照一次取齐)。 shan 非法时返回 nil。 注:方法与返回类型同名(Go 命名空间合法),对应 v2 无 Get 前缀约定。
func (*Lunar) SiLiSiJue ¶
SiLiSiJue 返回当日四离四绝标识;非四离四绝日返回空串。 如冬至前一日返回 "四离(冬至前一日)",立春前一日返回 "四绝(立春前一日)"。
Example ¶
民间择吉:四离四绝与禁忌速查。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 12, 20)
l := s.Lunar()
fmt.Println(l.SiLiSiJue())
fmt.Println(l.FolkTaboos())
}
Output: 四离(冬至前一日) [岁破 四离(冬至前一日)]
func (*Lunar) TaiSuiDeity ¶
func (l *Lunar) TaiSuiDeity() TaiSuiDeity
TaiSuiDeity 返回当日值年太岁星君(代理到所在农历年,正月初一换年口径)。 立春口径(择日通书主流)见 TaiSuiDeityByLiChun。
Example ¶
值年太岁:按日期取,正月初一换年(默认)与立春换年(择日通书主流)两派。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
// 2025-01-29 正月初一,立春(2025-02-03)前:换年窗口内两派太岁不同
chunJie := lunar.MustSolar(2025, 1, 29).Lunar()
liChun := lunar.MustSolar(2025, 2, 3).Lunar()
fmt.Println(chunJie.TaiSuiDeity().String())
fmt.Println(chunJie.TaiSuiDeityByLiChun().String())
fmt.Println(liChun.TaiSuiDeityByLiChun().String())
}
Output: 吴遂大将军 李诚大将军 吴遂大将军
func (*Lunar) TaiSuiDeityByLiChun ¶
func (l *Lunar) TaiSuiDeityByLiChun() TaiSuiDeity
TaiSuiDeityByLiChun 返回当日值年太岁星君(立春换年口径,择日通书主流)。 正月初一至立春之间的日期,太岁仍属上一农历年:如 2025-01-29(正月初一、 立春 2025-02-03 前)立春口径太岁仍为甲辰李诚,正月初一口径已是乙巳吴遂。
func (*Lunar) TaiYangDaoShan ¶
func (l *Lunar) TaiYangDaoShan(shan string) *DaoShanResult
TaiYangDaoShan 判定当日太阳与指定坐山的关系(到山/到向/三合照)。
太阳为万宿之主,照临之方大小凶煞可制化,宜修造动土、安葬立坟:
到向:上吉(光辉直照向方,取欣欣向荣之象)
三合照:次吉(光辉拱照坐山三合方)
到山:又次之(福山堂一派认为平民用之反招不利,唯帝王修造为宜,
造福堂等日馆则照常取用——见 Note,按师承取舍)
仅白天用事(夜晚太阳无光难显其用)。shan 非法时返回 nil。
Example ¶
天星择日:太阳到山到向三合照(2025-08-23 处暑区间,太阳在巳山)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 8, 23)
l := s.Lunar()
for _, shan := range []string{"巳", "亥", "酉"} {
if r := l.TaiYangDaoShan(shan); r.Relation != "" {
fmt.Printf("%s山:%s(%s)%s\n", shan, r.Relation, r.Grade, r.Detail)
}
}
}
Output: 巳山:到山(又次之)处暑太阳到巳山 亥山:到向(上吉)处暑太阳到巳山,即亥山之向(亥山巳向) 酉山:三合照(次吉)处暑太阳到巳山,与酉山(金局(巽庚癸·巳酉丑))三合
func (*Lunar) TaiYangShan ¶
TaiYangShan 返回当日节气区间太阳所在的山(到山驻留语义)。 非节气数据异常时返回空串。
func (*Lunar) TaiYinDaoShan ¶
func (l *Lunar) TaiYinDaoShan(shan string) *DaoShanResult
TaiYinDaoShan 判定当日太阴与指定坐山的关系(到山/到向/三合照)。
太阴母仪之象,至柔至顺,能压制众凶煞、遇难呈祥,宜夜晚用事。 到山乘时令得地气为吉;到向一派认为违反时令极凶(福山堂)、 一派照常取用(造福堂),见 Note,按师承取舍。shan 非法时返回 nil。
Example ¶
天星择日:太阴到山(2025-02-10 立春区间,太阴在艮山)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 2, 10)
l := s.Lunar()
r := l.TaiYinDaoShan("艮")
fmt.Println(r.Relation, r.Grade, r.Detail)
}
Output: 到山 吉 立春太阴到艮山
func (*Lunar) TimeChongGanTie ¶
TimeChongGanTie 返回时冲天干(贴身)。
func (*Lunar) TimeChongShengXiao ¶
TimeChongShengXiao 返回时冲生肖。
func (*Lunar) TimePositionCaiDesc ¶
TimePositionCaiDesc 返回时财神方位说明。
func (*Lunar) TimePositionFuDesc ¶
TimePositionFuDesc 返回时福神方位说明。
func (*Lunar) TimePositionXiDesc ¶
TimePositionXiDesc 返回时喜神方位说明。
func (*Lunar) TimePositionYangGui ¶
TimePositionYangGui 返回时阳贵方位。
func (*Lunar) TimePositionYangGuiDesc ¶
TimePositionYangGuiDesc 返回时阳贵方位说明。
func (*Lunar) TimePositionYinGui ¶
TimePositionYinGui 返回时阴贵方位。
func (*Lunar) TimePositionYinGuiDesc ¶
TimePositionYinGuiDesc 返回时阴贵方位说明。
func (*Lunar) TimeTianShenLuck ¶
TimeTianShenLuck 返回时辰天神吉凶。
func (*Lunar) TimeTianShenType ¶
TimeTianShenType 返回时辰天神类型。
func (*Lunar) Times ¶
Times 返回当日 12 个时辰(子时~亥时,时柱天干按当日日干五鼠遁起法)。 对应 v1 getTimes:早子时(00:00–00:59)与常时同用当日日干;若本 Lunar 时刻为 23 时(晚子),全部时辰按次日日干起遁(v1 同口径)。 晚子时(23:00–24:59)单独的时柱请用 NewLunarTimeFromLunar(MustNewLunarDateTime(y, m, d, 23, 0, 0)) 构造。
func (*Lunar) ToFullString ¶
ToFullString 返回完整黄历描述(与 v1 输出逐字一致,golden 基线)。
func (*Lunar) YearGanByLiChun ¶
YearGanByLiChun 返回年干(以立春当日起算)。
func (*Lunar) YearGanIndexByLiChun ¶
YearGanIndexByLiChun 返回年干序(立春当日)。
func (*Lunar) YearGanIndexExact ¶
YearGanIndexExact 返回年干序(立春交接时刻)。
func (*Lunar) YearInChinese ¶
YearInChinese 返回中文年份(如 二〇二〇)。 负年份(公元前)保留负号前缀(如 -1 → "-一");非数字字符原样保留(零 panic 红线)。
func (*Lunar) YearInGanZhiByLiChun ¶
YearInGanZhiByLiChun 返回年柱干支(以立春当日起算)。
func (*Lunar) YearInGanZhiExact ¶
YearInGanZhiExact 返回年柱干支(以立春交接时刻起算)。
func (*Lunar) YearNineStarBySect ¶
YearNineStarBySect 按流派返回年九星。
func (*Lunar) YearPositionTaiSui ¶
YearPositionTaiSui 返回年太岁方位(民间流派)。
func (*Lunar) YearPositionTaiSuiBySect ¶
YearPositionTaiSuiBySect 按流派返回年太岁方位 (SectAncient 正月初一 / SectFolk 立春当日 / SectExact 立春交接时刻)。
func (*Lunar) YearPositionTaiSuiDesc ¶
YearPositionTaiSuiDesc 返回年太岁方位说明。
func (*Lunar) YearPositionTaiSuiDescBySect ¶
YearPositionTaiSuiDescBySect 按流派返回年太岁方位说明。
func (*Lunar) YearShengXiaoByLiChun ¶
YearShengXiaoByLiChun 返回年生肖(以立春当日起算)。
func (*Lunar) YearShengXiaoExact ¶
YearShengXiaoExact 返回年生肖(以立春交接时刻起算)。
func (*Lunar) YearXunByLiChun ¶
YearXunByLiChun 返回年旬(以立春当日起算)。
func (*Lunar) YearXunKongByLiChun ¶
YearXunKongByLiChun 返回年空亡(以立春当日起算)。
func (*Lunar) YearXunKongExact ¶
YearXunKongExact 返回年空亡(以立春交接时刻起算)。
func (*Lunar) YearZhiByLiChun ¶
YearZhiByLiChun 返回年支(以立春当日起算)。
func (*Lunar) YearZhiIndexByLiChun ¶
YearZhiIndexByLiChun 返回年支序(立春当日)。
func (*Lunar) YearZhiIndexExact ¶
YearZhiIndexExact 返回年支序(立春交接时刻)。
func (*Lunar) YueJiang ¶
YueJiang 返回当日所处中气区间的月将(太阳过宫)地支。 月将随中气交接(交节当日起用新月将,与节气区间判定同口径); 如雨水后春分前为亥将(登明)、夏至后大暑前为未将(小吉)。 节气数据异常时返回空串(理论上不发生)。
func (*Lunar) ZeRi ¶
func (l *Lunar) ZeRi(opt ZeRiOptions) *ZeRiResult
ZeRi 对当日做指定用事的择日评估(典籍铺注模式)。
评估维度(Reasons 逐条标记来源,分块渲染可直接按 Sect 分组):
典籍·铺注 DayYi/DayJi 对事件键的命中(依据《协纪辨方书》铺注条例数据) 典籍·黄黑道 DayTianShen 吉凶 典籍·建除 ZhiXing 值神及通行吉凶口诀 民俗·禁忌 FolkTaboosTagged 全流派逐条(含分歧口径) 天星·到山 太阳/太阴到山到向三合照(传入 Shan 时) 民俗·正冲 日支冲用事人年支(传入 UserZhi 时)
Example ¶
分事择日:典籍铺注模式(判定依据逐条分块标记)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 8, 23)
l := s.Lunar()
r := l.ZeRi(lunar.ZeRiOptions{Event: "动土", Shan: "申", UserZhi: "午"})
fmt.Println("结论:", r.Verdict)
for _, it := range r.Reasons {
fmt.Printf(" [%s] %s:%s\n", it.Sect, it.Rule, it.Detail)
}
}
Output: 结论: 平 [典籍·铺注] 铺注:宜「动土、破土」 [典籍·黄黑道] 黄黑道:青龙(吉) [典籍·建除] 建除:定日 [民俗·禁忌(通行)] 杨公十三忌:七月初一 [民俗·禁忌(通行)] 节气交接日:处暑 [天星·到山] 太阴到山:处暑太阴到申山 [民俗·正冲] 正冲:日支子冲用事人年支午
func (*Lunar) ZeRiScore ¶
func (l *Lunar) ZeRiScore(opt ZeRiOptions) *ZeRiScoreResult
ZeRiScore 对当日做加权评分(现代参考模式,非典籍方法)。
模型:基础分 60,按黄黑道、建除、吉凶神煞(封顶 ±20)、事件铺注 命中、民俗禁忌、天星到山、正冲逐项加减:
≥85 上吉;≥70 吉;≥55 可用;≥40 平;<40 慎用
注意:加权评分为现代择日软件的启发式参考模型,《协纪辨方书》 的正统方法是分事铺注宜忌(见 ZeRi),两者并行不悖、各有用途—— 评分适合多候选日快速排序,铺注适合单日逐事定性。
Example ¶
分事择日:现代加权评分参考模式(非典籍方法,多候选日排序用)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
s, _ := lunar.NewSolar(2025, 8, 23)
l := s.Lunar()
sc := l.ZeRiScore(lunar.ZeRiOptions{Event: "动土", Shan: "申", UserZhi: "午"})
fmt.Println(sc.Score, sc.Level)
}
Output: 72 吉
type LunarMonth ¶
type LunarMonth struct {
// contains filtered or unexported fields
}
LunarMonth 表示农历月;month 为负表示闰月(如 -2 表示闰二月)。
func NewLunarMonth ¶
func NewLunarMonth(year, month int) *LunarMonth
NewLunarMonth 返回某年某月(month 为负表示闰月);不存在返回 nil。
func (LunarMonth) FirstJulianDay ¶
func (m LunarMonth) FirstJulianDay() float64
FirstJulianDay 返回该月首日(初一)的儒略日。
func (LunarMonth) Next ¶
func (m LunarMonth) Next(n int) *LunarMonth
Next 返回相对本月第 n 个月(n 可负;越界返回 nil)。
func (LunarMonth) PositionCaiDesc ¶
func (m LunarMonth) PositionCaiDesc() string
PositionCaiDesc 返回月财神方位说明。
func (LunarMonth) PositionFuBySect ¶
func (m LunarMonth) PositionFuBySect(sect Sect) string
PositionFuBySect 按流派返回月福神方位。
func (LunarMonth) PositionFuDesc ¶
func (m LunarMonth) PositionFuDesc() string
PositionFuDesc 返回月福神方位说明。
func (LunarMonth) PositionFuDescBySect ¶
func (m LunarMonth) PositionFuDescBySect(sect Sect) string
PositionFuDescBySect 按流派返回月福神方位说明。
func (LunarMonth) PositionTaiSui ¶
func (m LunarMonth) PositionTaiSui() string
PositionTaiSui 返回月太岁方位。
func (LunarMonth) PositionTaiSuiDesc ¶
func (m LunarMonth) PositionTaiSuiDesc() string
PositionTaiSuiDesc 返回月太岁方位说明。
func (LunarMonth) PositionXiDesc ¶
func (m LunarMonth) PositionXiDesc() string
PositionXiDesc 返回月喜神方位说明。
func (LunarMonth) PositionYangGui ¶
func (m LunarMonth) PositionYangGui() string
PositionYangGui 返回月阳贵方位。
func (LunarMonth) PositionYangGuiDesc ¶
func (m LunarMonth) PositionYangGuiDesc() string
PositionYangGuiDesc 返回月阳贵方位说明。
func (LunarMonth) PositionYinGui ¶
func (m LunarMonth) PositionYinGui() string
PositionYinGui 返回月阴贵方位。
func (LunarMonth) PositionYinGuiDesc ¶
func (m LunarMonth) PositionYinGuiDesc() string
PositionYinGuiDesc 返回月阴贵方位说明。
type LunarTime ¶
type LunarTime struct {
// contains filtered or unexported fields
}
LunarTime 表示时辰(含其所属农历日的上下文)。
func NewLunarTime ¶
NewLunarTime 构造指定农历年月日时刻的时辰(对应 v1 calendar.NewLunarTime)。
func NewLunarTimeFromLunar ¶
NewLunarTimeFromLunar 由农历时刻构造时辰。
func (*LunarTime) ChongShengXiao ¶
ChongShengXiao 返回时冲生肖。
func (*LunarTime) IsGuiDengTianMen ¶
IsGuiDengTianMen 判断当前时辰是否当日的贵登天门时(阳贵或阴贵 任一命中即真,默认协纪定例;昼夜细分请用 GuiDengTianMen 按 GuiType 取用)。
Example ¶
专业时辰层:时辰级贵登天门判定。2025-02-24 甲子日卯时 (雨水后亥将,阳贵未加乾亥)为贵登天门时。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
mao := lunar.NewLunarTimeFromLunar(lunar.MustNewLunarDateTime(2025, 1, 27, 6, 0, 0))
chen := lunar.NewLunarTimeFromLunar(lunar.MustNewLunarDateTime(2025, 1, 27, 8, 0, 0))
fmt.Println(mao.GanZhi(), mao.IsGuiDengTianMen())
fmt.Println(chen.GanZhi(), chen.IsGuiDengTianMen())
}
Output: 丁卯 true 戊辰 false
func (*LunarTime) IsRiLu ¶
IsRiLu 判断当前时辰是否日禄归时(时支为日干禄位)。
禄即十干临官之位:「甲禄在寅、乙禄在卯、丙戊禄在巳、丁己禄在 午、庚禄在申、辛禄在酉、壬禄在亥、癸禄在子」(出《五行大义》 及子平诸书)。《协纪辨方书》卷七:「神煞起例有八禄时,本日之 禄位也,定为吉时」——日禄归时主食禄临身,宜求财、赴任、见贵, 通书与黄黑道、贵登天门并列为时家吉时。
Example ¶
专业时辰层:日禄归时(时支为日干禄位,「八禄时」)。 甲禄在寅——甲子日丙寅时即日禄归时。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
l := lunar.MustNewLunarDateTime(2025, 1, 27, 4, 0, 0) // 甲子日寅时
lt := lunar.NewLunarTimeFromLunar(l)
fmt.Println(l.DayInGanZhi(), lt.GanZhi(), lt.IsRiLu())
}
Output: 甲子 丙寅 true
func (*LunarTime) IsWuBuYu ¶
IsWuBuYu 判断当前时辰是否五不遇时(时干克日干)。
《协纪辨方书》卷七神煞起例:「五不遇时,时干尅日干也」,并引 遁甲歌「时尅干兮五不遇,此时名为辱损明,举事遥遥终不定, 朝行暮败损精兵」——时干五行克日干五行(如甲日庚午时,庚金克 甲木),主谋事反复、举事不定,百事不宜。日干按晚子时日柱算 明天(DayGanIndexExact,与 NewLunarTimeFromLunar 时干起遁同源)。 另有「时支克日支亦为五不遇」的遁甲注家异说,协纪考原已辨其 「不若神煞起例之善」,不取。
Example ¶
专业时辰层:五不遇时(时干克日干,《协纪辨方书》卷七 「五不遇时,时干尅日干也」)。甲子日庚午时,庚金克甲木。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
l := lunar.MustNewLunarDateTime(2025, 1, 27, 12, 0, 0) // 农历正月廿七 = 2025-02-24 甲子日
wu := lunar.NewLunarTimeFromLunar(l) // 午时
yin := lunar.NewLunarTimeFromLunar(lunar.MustNewLunarDateTime(2025, 1, 27, 4, 0, 0)) // 寅时
fmt.Println(l.DayInGanZhi(), wu.GanZhi(), wu.IsWuBuYu())
fmt.Println(l.DayInGanZhi(), yin.GanZhi(), yin.IsWuBuYu())
}
Output: 甲子 庚午 true 甲子 丙寅 false
func (*LunarTime) PositionCaiDesc ¶
PositionCaiDesc 返回时财神方位说明。
func (*LunarTime) PositionFuBySect ¶
PositionFuBySect 按流派返回时福神方位。
func (*LunarTime) PositionFuDesc ¶
PositionFuDesc 返回时福神方位说明。
func (*LunarTime) PositionFuDescBySect ¶
PositionFuDescBySect 按流派返回时福神方位说明。
func (*LunarTime) PositionXiDesc ¶
PositionXiDesc 返回时喜神方位说明。
func (*LunarTime) PositionYangGui ¶
PositionYangGui 返回时阳贵方位。
func (*LunarTime) PositionYangGuiDesc ¶
PositionYangGuiDesc 返回时阳贵方位说明。
func (*LunarTime) PositionYinGui ¶
PositionYinGui 返回时阴贵方位。
func (*LunarTime) PositionYinGuiDesc ¶
PositionYinGuiDesc 返回时阴贵方位说明。
type LunarYear ¶
type LunarYear struct {
// contains filtered or unexported fields
}
LunarYear 表示农历年(含全部月序与节气表;数据来自缓存,只读共享)。
Example ¶
年视图:闰月与年景。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
year := lunar.NewLunarYear(2020)
fmt.Println("闰月:", year.LeapMonth())
fmt.Println("天数:", year.DayCount())
fmt.Println("治水:", year.ZhiShui())
}
Output: 闰月: 4 天数: 384 治水: 二龙治水
func LunarYearOfYear ¶
LunarYearOfYear 为内部别名(与 NewLunarYear 等价)。
func (*LunarYear) JieQiJulianDays ¶
JieQiJulianDays 返回 31 键节气儒略日(与 jieQiInUse 平行)。
func (*LunarYear) Month ¶
func (y *LunarYear) Month(month int) *LunarMonth
Month 返回本年某月(month 负数表示闰月);不存在返回 nil。
func (*LunarYear) Months ¶
func (y *LunarYear) Months() []LunarMonth
Months 返回全部 15 个月(自上年十一月起,跨年界)。
func (*LunarYear) MonthsInYear ¶
func (y *LunarYear) MonthsInYear() []LunarMonth
MonthsInYear 返回属于本年的月(正月或十一月起序,视年界而定)。
func (*LunarYear) PositionCaiDesc ¶
PositionCaiDesc 返回年财神方位说明。
func (*LunarYear) PositionFuBySect ¶
PositionFuBySect 按流派返回年福神方位。
func (*LunarYear) PositionFuDesc ¶
PositionFuDesc 返回年福神方位说明。
func (*LunarYear) PositionFuDescBySect ¶
PositionFuDescBySect 按流派返回年福神方位说明。
func (*LunarYear) PositionSanSha ¶
PositionSanSha 返回年三煞方位(如 "南")。 申子辰年煞南、巳酉丑年煞东、寅午戌年煞北、亥卯未年煞西。
Example ¶
年三煞方位:申子辰煞南、巳酉丑煞东、寅午戌煞北、亥卯未煞西。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
for _, year := range []int{2024, 2025, 2026} {
y := lunar.NewLunarYear(year)
fmt.Println(y.GanZhi(), y.PositionSanSha(), y.PositionSanShaDesc())
}
}
Output: 甲辰 南 南(巳午未) 乙巳 东 东(寅卯辰) 丙午 北 北(亥子丑)
func (*LunarYear) PositionSanShaDesc ¶
PositionSanShaDesc 返回年三煞方位说明(如 "南(巳午未)"), 三支依次为劫煞、灾煞、岁煞所临之支。
func (*LunarYear) PositionTaiSui ¶
PositionTaiSui 返回年太岁方位。
func (*LunarYear) PositionTaiSuiDesc ¶
PositionTaiSuiDesc 返回年太岁方位说明。
func (*LunarYear) PositionXiDesc ¶
PositionXiDesc 返回年喜神方位说明。
func (*LunarYear) PositionYangGui ¶
PositionYangGui 返回年阳贵方位。
func (*LunarYear) PositionYangGuiDesc ¶
PositionYangGuiDesc 返回年阳贵方位说明。
func (*LunarYear) PositionYinGui ¶
PositionYinGui 返回年阴贵方位。
func (*LunarYear) PositionYinGuiDesc ¶
PositionYinGuiDesc 返回年阴贵方位说明。
func (*LunarYear) TaiSuiDeity ¶
func (y *LunarYear) TaiSuiDeity() TaiSuiDeity
TaiSuiDeity 返回该农历年的值年太岁星君(按年号干支)。
值年太岁以立春为岁首更替是择日通书主流口径:正月初一至立春之间的 日期,其值年太岁(立春口径)仍属上一农历年,见 Lunar.TaiSuiDeityByLiChun; 民俗安太岁则多随正月初一更替,见 Lunar.TaiSuiDeity。本方法按农历年号 干支直取,为整年视图。
Example ¶
值年太岁:由农历年取太岁星君名讳(白云观元辰殿体系)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
y := lunar.NewLunarYear(2025)
d := y.TaiSuiDeity()
fmt.Println(d.GanZhi, d.String())
}
Output: 乙巳 吴遂大将军
func (*LunarYear) ToFullString ¶
ToFullString 返回如 "2020年"。
type MeiYu ¶
type MeiYu struct {
In *Date `json:"in,omitempty"` // 入梅日(nil 为防御路径,理论上必能找到)
Out *Date `json:"out,omitempty"` // 出梅日(同上)
Base MeiYuBase `json:"base"` // 所用口径
Note string `json:"note,omitempty"` // 口径出处备注
}
MeiYu 某公历年的梅雨区间(入梅日~出梅日,两端含)。
type MoonPhaseEvent ¶
MoonPhaseEvent 一次月相事件。
type NianJing ¶
type NianJing struct {
TouLiang string `json:"touLiang"` // 几鼠偷粮
CaoZi string `json:"caoZi"` // 草子几分
GengTian string `json:"gengTian"` // 几牛耕田
HuaShou string `json:"huaShou"` // 花收几分
ZhiShui string `json:"zhiShui"` // 几龙治水
TuoGu string `json:"tuoGu"` // 几马驮谷
QiangMi string `json:"qiangMi"` // 几鸡抢米
KanCan string `json:"kanCan"` // 几姑看蚕
GongZhu string `json:"gongZhu"` // 几屠共猪
JiaTian string `json:"jiaTian"` // 甲田几分
FenBing string `json:"fenBing"` // 几人分饼
DeJin string `json:"deJin"` // 几日得金
RenBing string `json:"renBing"` // 几人几丙
RenChu string `json:"renChu"` // 几人几锄
}
NianJing 年景歌诀(灶马头农事年成占诀,聚合 LunarYear 十四法; 归属当日所在农历年,键为小驼峰拼音)。
type NineStar ¶
type NineStar struct {
// contains filtered or unexported fields
}
NineStar 表示九星。
func (*NineStar) LuckInXuanKong ¶
LuckInXuanKong 返回玄空吉凶。
func (*NineStar) NameInXuanKong ¶
NameInXuanKong 返回玄空九星名。
func (*NineStar) YinYangInQiMen ¶
YinYangInQiMen 返回奇门阴阳。
type Sect ¶
type Sect int
Sect 表示八字流派(晚子时日柱口径)与部分按流派 API 的换年口径。
- SectAncient 古法(晚子时日柱算当天;换年口径为正月初一)
- SectFolk 民间(晚子时日柱算明天,默认;换年口径为立春当日)
- SectExact 精确(按节气交接时刻换年;仅 *BySect 年界类 API 支持)
type ShanInfo ¶
type ShanInfo struct {
Shan string `json:"shan"` // 坐山
Opposite string `json:"opposite"` // 到向(对冲山)
SanHe [2]string `json:"sanHe"` // 三合照两山
Ju string `json:"ju"` // 所属三合局(双山五行)
TaiYang *DaoShanResult `json:"taiYang"` // 太阳判定
TaiYin *DaoShanResult `json:"taiYin"` // 太阴判定
JieQi string `json:"jieQi"` // 当日所处节气
}
ShanInfo 坐山综合信息(二十四山适配一次取齐)。
type Solar ¶
type Solar struct {
// contains filtered or unexported fields
}
Solar 为公历日期时间(值类型,计划 T1.1:6 个 int 字段 ≈48B—— 栈分配、可比较、可拷贝、构造零堆分配)。
支持年份域:约公元前 4713 年 ~ 公元 9999 年(受儒略日换算限制); 1582-10-05 ~ 14 为儒略历改革空档,构造返回 ErrJulianGap。
并发语义:值类型天然并发安全(构造后只读)。
func FromJulianDay ¶
FromJulianDay 由儒略日(UT)构造。 儒略日超出公历支持域(公元前 4713 ~ 公元 9999 年)时返回包装 ErrInvalidYear 的错误(更远的年份天文表精度失效,v2 零 panic 红线要求显式拒绝)。
func MustSolarTime ¶
MustSolarTime 构造公历日期时间,非法输入 panic。仅建议字面量常量使用。
func NewSolarTime ¶
NewSolarTime 构造公历日期时间。
func SolarFromBaZi ¶
SolarFromBaZi 由八字四柱反推公历时刻(民间流派,baseYear=1900)。 yearGanZhi/monthGanZhi/dayGanZhi/timeGanZhi 为年/月/日/时柱干支(如 "丙寅")。 干支非法返回 ErrInvalidGanZhi;无匹配时刻返回空切片。
Example ¶
八字反推:由四柱求公历时刻。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
list, err := lunar.SolarFromBaZi("丙辰", "丁酉", "丙子", "甲午")
if err != nil {
panic(err)
}
for _, s := range list {
fmt.Println(s.ToYmdHms())
}
}
Output: 1916-10-06 12:00:00 1976-09-21 12:00:00
func SolarFromBaZiBySect ¶
func SolarFromBaZiBySect(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi string, sect Sect) ([]Solar, error)
SolarFromBaZiBySect 按流派反推(SectFolk 晚子时日柱算当天,SectAncient 算明天)。
func SolarFromBaZiBySectAndBaseYear ¶
func SolarFromBaZiBySectAndBaseYear(yearGanZhi, monthGanZhi, dayGanZhi, timeGanZhi string, sect Sect, baseYear int) ([]Solar, error)
SolarFromBaZiBySectAndBaseYear 指定起算年份反推(v1 ListSolarFromBaZiBySectAndBaseYear)。 搜索范围:baseYear-1 起、以年柱 60 年周期逐窗推进至当前年份。
func SolarFromTime ¶
SolarFromTime 由 time.Time 构造公历(取其年月日时分秒)。
func (Solar) Format ¶
Format 按 Go time 布局输出(如 "2006-01-02"、"2006年01月02日 15:04")。 年份超出 [1,9999] 时的输出与 Go time 包行为一致。
func (Solar) FormatChinese ¶
FormatChinese 返回 "2020年01月01日" 形态。
func (Solar) Lunar ¶
Lunar 返回对应农历(依赖年表缓存,热路径 ≤5µs 验收)。
Example ¶
基础转换:公历 ⇄ 农历。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
solar := lunar.MustSolar(2020, 1, 25)
lunarDay := solar.Lunar()
fmt.Println(lunarDay.String())
fmt.Println(lunarDay.YearInGanZhi(), lunarDay.MonthInGanZhi(), lunarDay.DayInGanZhi())
}
Output: 二〇二〇年正月初一 庚子 丁丑 丁卯
func (Solar) MarshalJSON ¶
MarshalJSON 输出 "2006-01-02 15:04:05" 字符串(API 服务刚需)。
func (Solar) NextMoonPhase ¶
func (s Solar) NextMoonPhase() (MoonPhaseEvent, error)
NextMoonPhase 返回 s 时刻之后最近的一次月相事件(四相中最早者)。
Example ¶
ev, _ := MustSolar(2025, 1, 1).NextMoonPhase() fmt.Println(ev.Phase, ev.Solar.ToYmdHms())
Output: 上弦 2025-01-07 07:56:41
func (Solar) NextMoonPhaseOf ¶
func (s Solar) NextMoonPhaseOf(phase string) (MoonPhaseEvent, error)
NextMoonPhaseOf 返回 s 时刻之后最近一次指定月相的精确时刻。 phase 须取 MoonPhaseShuo / MoonPhaseShangXian / MoonPhaseWang / MoonPhaseXiaXian。
func (Solar) OtherFestivals ¶
OtherFestivals 返回当日其他公历节日/纪念日。
func (Solar) PrevMoonPhase ¶
func (s Solar) PrevMoonPhase() (MoonPhaseEvent, error)
PrevMoonPhase 返回 s 时刻之前(含相等)最近的一次月相事件(四相中最晚者)。
func (Solar) PrevMoonPhaseOf ¶
func (s Solar) PrevMoonPhaseOf(phase string) (MoonPhaseEvent, error)
PrevMoonPhaseOf 返回 s 时刻之前(含相等)最近一次指定月相的精确时刻。
Example ¶
// 2025 年芒种后最近一次望(满月) ev, _ := MustSolar(2025, 6, 15).PrevMoonPhaseOf(MoonPhaseWang) fmt.Println(ev.Phase, ev.Solar.ToYmdHms(), FromSolar(ev.Solar).DayInChinese())
Output: 望 2025-06-11 15:46:35 十六
func (Solar) SalaryRate ¶
SalaryRate 返回工资倍率:3=法定节假日(元旦/劳动节/国庆前三天/春节前三天/端午/中秋/清明), 2=休息日(周末或调休放假),1=工作日。
func (Solar) Subtract ¶
Subtract 返回 s 与 other 相差的天数(s - other,仅按日期计算)。 注:data.DaysBetween(a, b) 的语义是 b - a(与 v1 GetDaysBetween 一致), 故此处参数顺序为 (other, s)。
func (Solar) SubtractMinute ¶
SubtractMinute 返回 s 与 other 相差的分钟数(s - other)。
func (Solar) ToFullString ¶
ToFullString 返回完整描述(含闰年/星期/节日/星座,与 v1 输出逐字一致)。
func (Solar) WeekInChinese ¶
WeekInChinese 返回星期几的中文名(日/一/……/六)。
type SolarHalfYear ¶
type SolarHalfYear struct {
// contains filtered or unexported fields
}
SolarHalfYear 表示阳历半年(上/下半年)。值类型。
func NewSolarHalfYear ¶
func NewSolarHalfYear(year, month int) SolarHalfYear
NewSolarHalfYear 构造阳历半年(v1 NewSolarHalfYearFromYm)。
func (SolarHalfYear) Iter ¶
func (h SolarHalfYear) Iter() iter.Seq[SolarHalfYear]
Iter 返回本半年起(含本半年)逐半年向前的无限序列,配合 break 使用。
func (SolarHalfYear) Months ¶
func (h SolarHalfYear) Months() []SolarMonth
Months 返回本半年包含的 6 个月(v1 GetMonths)。
func (SolarHalfYear) Next ¶
func (h SolarHalfYear) Next(halfYears int) SolarHalfYear
Next 返回 halfYears 个半年后(可为负;v1 Next)。
func (SolarHalfYear) Seasons ¶
func (h SolarHalfYear) Seasons() []SolarSeason
Seasons 返回本半年包含的 2 个季度(v2 新增层级访问器)。
func (SolarHalfYear) ToFullString ¶
func (h SolarHalfYear) ToFullString() string
ToFullString 返回 "2020年上半年" / "2020年下半年" 形态。
type SolarMonth ¶
type SolarMonth struct {
// contains filtered or unexported fields
}
SolarMonth 表示阳历月。值类型:可比较、可拷贝、零堆分配。
func NewSolarMonth ¶
func NewSolarMonth(year, month int) SolarMonth
NewSolarMonth 构造阳历月(v1 NewSolarMonthFromYm)。
func (SolarMonth) Days ¶
func (m SolarMonth) Days() []Solar
Days 返回本月逐日(v1 GetDays;1582 年 10 月为 21 天,跨儒略历洞)。
func (SolarMonth) Iter ¶
func (m SolarMonth) Iter() iter.Seq[SolarMonth]
Iter 返回自本月起(含本月)逐月向前的无限序列,配合 break 使用。
func (SolarMonth) Next ¶
func (m SolarMonth) Next(months int) SolarMonth
Next 返回 months 月后(可为负;v1 Next)。
func (SolarMonth) ToFullString ¶
func (m SolarMonth) ToFullString() string
ToFullString 返回 "2020年3月" 形态。
func (SolarMonth) WeekCount ¶
func (m SolarMonth) WeekCount(start WeekStart) int
WeekCount 返回本月在 start 周起始约定下占用的周数(恒等于 len(Weeks(start)))。 v2 新增便捷方法;注意与 v1 SolarUtil.GetWeeksOfMonth 的公式 ceil((天数+1日星期-start)/7) 在「1 日星期早于 start」的月份(如 2023-01 周一起)少 1, 本方法与 Weeks 切片严格一致。
func (SolarMonth) Weeks ¶
func (m SolarMonth) Weeks(start WeekStart) []SolarWeek
Weeks 返回本月占用的周(v1 GetWeeks;自包含当月 1 日的周起, 至首日仍落在本月的周止——含首尾跨月的部分周)。
type SolarSeason ¶
type SolarSeason struct {
// contains filtered or unexported fields
}
SolarSeason 表示阳历季度(锚定年内任一月,归属于所在季度)。值类型。
func NewSolarSeason ¶
func NewSolarSeason(year, month int) SolarSeason
NewSolarSeason 构造阳历季度(v1 NewSolarSeasonFromYm)。
func (SolarSeason) HalfYear ¶
func (s SolarSeason) HalfYear() SolarHalfYear
HalfYear 返回本季度所在的半年(v2 新增层级访问器)。
func (SolarSeason) Iter ¶
func (s SolarSeason) Iter() iter.Seq[SolarSeason]
Iter 返回本季度起(含本季度)逐季度向前的无限序列,配合 break 使用。
func (SolarSeason) Months ¶
func (s SolarSeason) Months() []SolarMonth
Months 返回本季度包含的 3 个月(v1 GetMonths)。
func (SolarSeason) Next ¶
func (s SolarSeason) Next(seasons int) SolarSeason
Next 返回 seasons 个季度后(可为负;v1 Next)。
func (SolarSeason) ToFullString ¶
func (s SolarSeason) ToFullString() string
ToFullString 返回 "2020年1季度" 形态。
type SolarWeek ¶
type SolarWeek struct {
// contains filtered or unexported fields
}
SolarWeek 表示阳历周(锚定某日,按 start 约定的一周)。 值类型:可比较、可拷贝、零堆分配。
func NewSolarWeek ¶
NewSolarWeek 构造阳历周;锚定日期不做校验(视图语义,非法输入推算结果未定义但不 panic)。
func (SolarWeek) DaysInMonth ¶
DaysInMonth 返回本周中落在本月的日子(v1 GetDaysInMonth 意图的修复实现,见文件头差异 2)。
func (SolarWeek) FirstDayInMonth ¶
FirstDayInMonth 返回本周中落在本月的第一个日子(v1 GetFirstDayInMonth); 合法锚定下本周必含本月日子,故恒有值。
func (SolarWeek) IndexInYear ¶
IndexInYear 返回本周在本年的第几周(1 起;v1 GetIndexInYear); 锚定日期非法(如 1582-10-05~14 儒略历洞)时返回 0。
func (SolarWeek) Iter ¶
Iter 返回自本周起(含本周)逐周向前的无限序列(自然周链,等价于连续 Next(1, false)), 配合 break 使用:
for w := range NewSolarWeek(2024, 1, 1, Monday).Iter() {
if w.Month() == 3 { break }
}
Example ¶
时间组件 + Go 1.23 迭代器。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
// 遍历 2024 年 3 月的每周(周一起)
month := lunar.NewSolarMonth(2024, 3)
for _, week := range month.Weeks(lunar.Monday) {
fmt.Println(week.ToFullString())
}
}
Output: 2024年3月第1周 2024年3月第2周 2024年3月第3周 2024年3月第4周 2024年3月第5周
func (SolarWeek) Next ¶
Next 返回 weeks 周后(可为负;v1 Next)。
separateMonth 为 false 时按自然周推进(锚定日 ±7×weeks); 为 true 时按「月内周序」推进:跨月时前移吸附到目标月第 1 周(锚定该周首日或当月 1 日), 后退吸附到目标月最后一周(锚定该周末日或当月末日)。 注:v1 因变量遮蔽该模式恒返回自身,v2 恢复其设计语义(见文件头差异 1)。
func (SolarWeek) ToFullString ¶
ToFullString 返回 "2020年5月第3周" 形态。
type SolarYear ¶
type SolarYear struct {
// contains filtered or unexported fields
}
SolarYear 表示阳历年。值类型。
func NewSolarYear ¶
NewSolarYear 构造阳历年(v1 NewSolarYearFromYear)。
func (SolarYear) HalfYears ¶
func (y SolarYear) HalfYears() []SolarHalfYear
HalfYears 返回本年 2 个半年(v2 新增层级访问器)。
func (SolarYear) Seasons ¶
func (y SolarYear) Seasons() []SolarSeason
Seasons 返回本年 4 个季度(v2 新增层级访问器)。
func (SolarYear) ToFullString ¶
ToFullString 返回 "2020年" 形态。
type TaiSuiDeity ¶
type TaiSuiDeity struct {
GanZhi string `json:"ganZhi"` // 年干支(如 "甲辰")
Name string `json:"name"` // 星君名讳(如 "李诚")
Title string `json:"title"` // 尊号("大将军")
Note string `json:"note,omitempty"` // 名讳异读标注(如 "一作王清";无则空)
}
TaiSuiDeity 值年太岁星君(六十甲子各一位)。
func TaiSuiDeityOfGanZhi ¶
func TaiSuiDeityOfGanZhi(ganZhi string) (TaiSuiDeity, bool)
TaiSuiDeityOfGanZhi 由年干支(如 "甲辰")返回值年太岁星君; 干支非法(非六十甲子组合,如 "甲丑")时 ok=false。
type Tao ¶
type Tao struct {
// contains filtered or unexported fields
}
Tao 道历。
func MustNewTao ¶
MustNewTao 构造道历日期时间,非法输入 panic。仅建议字面量常量使用。
func MustNewTaoFromYmd ¶
MustNewTaoFromYmd 构造道历日期,非法输入 panic。仅建议字面量常量使用。
func NewTaoFromLunar ¶
NewTaoFromLunar 由农历构造道历(lunar 为 nil 时返回 nil)。
func NewTaoFromYmd ¶
NewTaoFromYmd 构造道历日期(零时)。
func (*Tao) Festivals ¶
func (t *Tao) Festivals() []TaoFestival
Festivals 返回当日道历节日(含冬至/夏至圣诞、八节日、八会日判定,v1 顺序)。
func (*Tao) ToFullString ¶
ToFullString 返回完整道历描述(干支纪年月日 + 时辰,v1 逐字一致)。
type TaoFestival ¶
type TaoFestival struct {
// contains filtered or unexported fields
}
TaoFestival 道历节日(值类型:小对象、构造后只读)。
func (TaoFestival) ToFullString ¶
func (f TaoFestival) ToFullString() string
ToFullString 返回完整描述(名称 + [备注])。
type TianMenGui ¶
type TianMenGui struct {
GuiType string `json:"guiType"` // 贵神类型:"阳贵"(昼贵)/"阴贵"(夜贵)
ZhiIndex int `json:"zhiIndex"` // 时支序(0=子 …… 11=亥)
Zhi string `json:"zhi"` // 时支名
}
TianMenGui 贵登天门时条目。
type XingJiaCategory ¶
type XingJiaCategory struct {
Name string `json:"name"` // 档名
Months [2]int `json:"months"` // 农历月序(升序)
Note string `json:"note"` // 宜忌说明
}
XingJiaCategory 行嫁十二月六档归属之一。
func XingJiaMonths ¶
func XingJiaMonths(nvZhi string) ([]XingJiaCategory, bool)
XingJiaMonths 按女命年支返回行嫁十二月的完整六档归属 (大利月/妨媒人/妨翁姑/妨父母/妨夫主/妨女身,各两个月,合覆十二月)。
六档自大利月起按月序顺推:大利 k 与 k+6、妨媒人 k+1 与 k+7、 妨翁姑 k+2 与 k+8、妨父母 k+3 与 k+9、妨夫主 k+4 与 k+10、 妨女身 k+5 与 k+11。如女命子年:大利六、十二月,妨媒人正、七月, 妨翁姑二、八月,妨父母三、九月,妨夫主四、十月,妨女身五、十一月。 闰月随本月序号。地支非法时 ok 为 false。
Example ¶
择吉流派:女命行嫁十二月六档全表(女命子年)。
package main
import (
"fmt"
"github.com/tekintian/lunar"
)
func main() {
cats, _ := lunar.XingJiaMonths("子")
for _, c := range cats {
fmt.Printf("%s%v月:%s\n", c.Name, c.Months, c.Note)
}
}
Output: 大利月[6 12]月:宜嫁娶 妨媒人[1 7]月:小利月,次吉;妨媒人,无媒可成婚 妨翁姑[2 8]月:妨公婆,翁姑避之可成婚 妨父母[3 9]月:妨父母,父母避之可成婚 妨夫主[4 10]月:妨丈夫,夫避之可成婚 妨女身[5 11]月:妨女自身,大凶勿用
type YearBoundary ¶
type YearBoundary int
YearBoundary 换年界限口径(岁破等年依规则的分派依据)。
const ( // YearByLiChun 立春换年:子平命理与择日馆主流(太岁随立春更替)。 YearByLiChun YearBoundary = iota // YearByChuYi 正月初一换年:民俗与港台民历常用(生肖太岁随新年更替)。 YearByChuYi )
type ZeRiOptions ¶
type ZeRiOptions struct {
Event string // 用事(口语别名或铺注键,如「嫁娶」「搬家」「开业」;空串仅出概况)
Shan string // 坐山(二十四山,可选;传入则做太阳/太阴到山适配)
UserZhi string // 用事人年支(子丑寅……亥,可选;传入则做正冲校验)
}
ZeRiOptions 择日评估入参。
type ZeRiResult ¶
type ZeRiResult struct {
Event string `json:"event"` // 规范用事名
EventKeys []string `json:"eventKeys,omitempty"` // 对应铺注键
GanZhi string `json:"ganZhi"` // 日干支
TianShen string `json:"tianShen"` // 黄黑道天神
TianShenLuck string `json:"tianShenLuck"` // 黄道吉/黑道凶
ZhiXing string `json:"zhiXing"` // 建除十二神
YiHit []string `json:"yiHit,omitempty"` // 命中的宜键
JiHit []string `json:"jiHit,omitempty"` // 命中的忌键
Chong string `json:"chong"` // 日冲生肖
ChongUser bool `json:"chongUser,omitempty"` // 冲用事人年支(正冲)
Taboos []ZejiItem `json:"taboos,omitempty"` // 民俗禁忌(全流派标记版)
Shan *ShanInfo `json:"shan,omitempty"` // 坐山适配(传入 Shan 时)
Verdict string `json:"verdict"` // 宜 / 忌 / 平 / 诸事不宜
Reasons []ZejiItem `json:"reasons"` // 判定依据(分块+标记)
}
ZeRiResult 分事择日评估结果(判定依据逐条分块标记)。
type ZeRiScoreResult ¶
type ZeRiScoreResult struct {
Score int `json:"score"` // 0~100
Level string `json:"level"` // 上吉 / 吉 / 可用 / 平 / 慎用
Items []ZejiItem `json:"items"` // 逐项加减分明细(Sect=现代参考·加权项)
Warning string `json:"warning"` // 非典籍声明
}
ZeRiScoreResult 现代加权评分结果。
type ZejiItem ¶
type ZejiItem struct {
Rule string `json:"rule"` // 规则名(如「岁破」「红沙日」)
Detail string `json:"detail"` // 细节(如「日支戌冲太岁辰」)
Sect string `json:"sect"` // 流派/口径标记
Source string `json:"source"` // 典籍出处
Note string `json:"note,omitempty"` // 版本差异备注(异派观点)
}
ZejiItem 带流派标记的择吉判定条目。
Sect 取值约定:「通行」(诸派同判)或「体系·口径」格式 (如「通书·立春换年」「民俗·初一换年」「通书·月建口径」)。
Source Files
¶
- almanac.go
- astro_bind.go
- bazi.go
- date.go
- doc.go
- eightchar.go
- enums.go
- errors.go
- foto.go
- foto_festival.go
- ganzhi_rel.go
- holiday.go
- holiday_json.go
- jieqi.go
- lunar.go
- lunar_festival.go
- lunar_ganzhi.go
- lunar_jieqi.go
- lunar_shensha.go
- lunar_year.go
- lunartime.go
- meiyu.go
- moonphase.go
- ninestar.go
- shujiu_fu.go
- solar.go
- solar_week.go
- taisui.go
- tao.go
- tao_festival.go
- yun.go
- zeji.go
- zeji_shan.go
- zeji_time.go
- zeji_variant.go
- zeji_zeri.go
Directories
¶
| Path | Synopsis |
|---|---|
|
cmd
|
|
|
lunarholiday
command
Command lunarholiday 为节假日数据维护工具链(计划 T3.5)。
|
Command lunarholiday 为节假日数据维护工具链(计划 T3.5)。 |
|
internal
|
|
|
astro
Package astro 实现寿星天文历的核心天体位置算法:VSOP87D 简化日月黄经、 章动、光行差、ΔT 拟合,以及朔(新月)与节气(太阳视黄经 15° 整数倍)的 牛顿迭代求解。
|
Package astro 实现寿星天文历的核心天体位置算法:VSOP87D 简化日月黄经、 章动、光行差、ΔT 拟合,以及朔(新月)与节气(太阳视黄经 15° 整数倍)的 牛顿迭代求解。 |
|
calcache
Package calcache 提供历法年表的并发安全缓存组件(计划 T1.10/T2.2)。
|
Package calcache 提供历法年表的并发安全缓存组件(计划 T1.10/T2.2)。 |
|
data
农历基础常量表(天干地支、数字、月日名、神煞、方位、冲煞等)。
|
农历基础常量表(天干地支、数字、月日名、神煞、方位、冲煞等)。 |
|
data/holidays
Package holidays 内嵌主库假日数据基线(Layer 1,计划 §4.1)。
|
Package holidays 内嵌主库假日数据基线(Layer 1,计划 §4.1)。 |
|
gz
Package gz 提供干支域的高速查询:六十甲子索引、旬/旬空、 每日宜忌、每日神煞(吉神/凶煞)与时辰宜忌。
|
Package gz 提供干支域的高速查询:六十甲子索引、旬/旬空、 每日宜忌、每日神煞(吉神/凶煞)与时辰宜忌。 |