|
|
package calendar
|
|
|
|
|
|
import (
|
|
|
"time"
|
|
|
|
|
|
"b612.me/astro/basic"
|
|
|
)
|
|
|
|
|
|
const (
|
|
|
JQ_春分 = 15 * iota
|
|
|
JQ_清明
|
|
|
JQ_谷雨
|
|
|
JQ_立夏
|
|
|
JQ_小满
|
|
|
JQ_芒种
|
|
|
JQ_夏至
|
|
|
JQ_小暑
|
|
|
JQ_大暑
|
|
|
JQ_立秋
|
|
|
JQ_处暑
|
|
|
JQ_白露
|
|
|
JQ_秋分
|
|
|
JQ_寒露
|
|
|
JQ_霜降
|
|
|
JQ_立冬
|
|
|
JQ_小雪
|
|
|
JQ_大雪
|
|
|
JQ_冬至
|
|
|
JQ_小寒
|
|
|
JQ_大寒
|
|
|
JQ_立春
|
|
|
JQ_雨水
|
|
|
JQ_惊蛰
|
|
|
)
|
|
|
|
|
|
// Lunar 公历转农历
|
|
|
// 传入 公历年月日
|
|
|
// 返回 农历月,日,是否闰月以及文字描述
|
|
|
func Lunar(year, month, day int) (int, int, bool, string) {
|
|
|
return basic.GetLunar(year, month, day, 8.0/24.0)
|
|
|
}
|
|
|
|
|
|
// ChineseLunar 公历转农历
|
|
|
// 传入 公历年月日
|
|
|
// 返回 农历月,日,是否闰月以及文字描述
|
|
|
// 忽略时区,日期一律按北京时间计算
|
|
|
func ChineseLunar(date time.Time) (int, int, bool, string) {
|
|
|
return basic.GetLunar(date.Year(), int(date.Month()), date.Day(), 8.0/24.0)
|
|
|
}
|
|
|
|
|
|
// Solar 农历转公历
|
|
|
// 传入 农历年份,月,日,是否闰月
|
|
|
// 传出 公历时间
|
|
|
// 农历年份用公历年份代替,但是岁首需要使用农历岁首
|
|
|
// 例:计算己亥猪年腊月三十日对应的公历(即2020年1月24日)
|
|
|
// 由于农历还未到鼠年,故应当传入Solar(2019,12,30,false)
|
|
|
func Solar(year, month, day int, leap bool) time.Time {
|
|
|
jde := basic.GetSolar(year, month, day, leap, 8.0/24.0)
|
|
|
zone := time.FixedZone("CST", 8*3600)
|
|
|
return basic.JDE2DateByZone(jde, zone, true)
|
|
|
}
|
|
|
|
|
|
// GanZhi 返回传入年份对应的干支
|
|
|
func GanZhi(year int) string {
|
|
|
return basic.GetGZ(year)
|
|
|
}
|
|
|
|
|
|
// JieQi 返回传入年份、节气对应的北京时间节气时间
|
|
|
func JieQi(year, term int) time.Time {
|
|
|
calcJde := basic.GetJQTime(year, term)
|
|
|
zone := time.FixedZone("CST", 8*3600)
|
|
|
return basic.JDE2DateByZone(calcJde, zone, false)
|
|
|
}
|
|
|
|
|
|
// WuHou 返回传入年份、物候对应的北京时间物候时间
|
|
|
func WuHou(year, term int) time.Time {
|
|
|
calcJde := basic.GetWHTime(year, term)
|
|
|
zone := time.FixedZone("CST", 8*3600)
|
|
|
return basic.JDE2DateByZone(calcJde, zone, false)
|
|
|
}
|