astro/calendar/chineseSanGuo.go
starainrt d6b6452304
1. 补充农历覆盖到公元前104年
2. 农历信息中包含君主、年号、朝代
3. 丰富一些算法,修正一些问题
2025-09-15 20:55:38 +08:00

306 lines
6.1 KiB
Go

package calendar
// 蜀汉朔日表
func shuCals() map[int]uint32 {
return map[int]uint32{
237: 2862623744,
238: 3042255104,
239: 2874160128,
240: 1432365568,
241: 2863373824,
242: 1788883200,
243: 2907710976,
244: 1432984576,
245: 1431318016,
246: 1789764352,
247: 1520449024,
248: 2865769216,
249: 1432100864,
250: 1431319296,
251: 1520445440,
252: 2865929472,
253: 2863673088,
254: 1431315712,
255: 1520998912,
256: 1453337856,
257: 2863964416,
258: 2862625792,
259: 3041929472,
260: 1454087936,
261: 1432367360,
262: 2862622208,
263: 3578927872,
}
}
func shuEras() []Era {
return []Era{
{
Year: 264,
Emperor: "魏元帝",
OtherNianHaoStart: "咸熙",
},
{
Year: 263,
Emperor: "蜀后主",
OtherNianHaoStart: "炎兴",
},
{
Year: 258,
Emperor: "蜀后主",
Nianhao: "景耀",
},
{
Year: 238,
Emperor: "蜀后主",
Nianhao: "延熙",
},
{
Year: 223,
Emperor: "蜀后主",
OtherNianHaoStart: "建兴",
},
{
Year: 221,
Emperor: "蜀昭烈帝",
Nianhao: "章武",
},
}
}
func shuEraMap() map[string][][]int {
return map[string][][]int{
"炎兴": [][]int{{263, 263}},
"景耀": [][]int{{258, 263}},
"延熙": [][]int{{238, 257}},
"建兴": [][]int{{223, 237}},
"章武": [][]int{{221, 223}},
}
}
func wuCals() map[int]uint32 {
return map[int]uint32{
223: 1432367360,
224: 2862622208,
225: 3578927616,
226: 2907712768,
227: 1433281280,
228: 1431320064,
229: 1788881408,
230: 2907971328,
231: 2865771008,
232: 1431316480,
233: 1789565952,
234: 1520447232,
235: 2865767424,
236: 1431378432,
237: 3578800896,
238: 1521295616,
239: 1436562432,
240: 2862622976,
241: 3578993920,
242: 3041931264,
243: 1436558848,
244: 2863766272,
245: 2862624000,
246: 3042320896,
247: 2865771776,
248: 1431317248,
249: 2863406848,
250: 1788883456,
251: 2874156800,
252: 1431969024,
253: 1431318272,
254: 1520444416,
255: 2874185984,
256: 2863672320,
257: 1431642368,
258: 3041932032,
259: 1453336832,
260: 2863898112,
261: 2862624768,
262: 3041928448,
263: 1453955840,
264: 1432366592,
265: 2863505920,
266: 1788884224,
267: 2907712000,
268: 1433149440,
269: 1431319040,
270: 1788880640,
271: 2907872256,
272: 2865770240,
273: 1431315456,
274: 1789434112,
275: 1453337600,
276: 2866094336,
277: 2862625536,
278: 3578800128,
279: 1454087680,
280: 1436561664,
}
}
func wuEraMap() map[string][][]int {
return map[string][][]int{
"天玺": [][]int{{276, 276}},
"天册": [][]int{{275, 276}},
"凤凰": [][]int{{272, 275}},
"建衡": [][]int{{269, 271}},
"宝鼎": [][]int{{266, 269}},
"甘露": [][]int{{265, 266}},
"元兴": [][]int{{264, 265}},
"永安": [][]int{{258, 264}},
"太平": [][]int{{256, 258}},
"五凤": [][]int{{254, 256}},
"建兴": [][]int{{252, 253}},
"太元": [][]int{{251, 252}},
"赤乌": [][]int{{238, 251}},
"嘉禾": [][]int{{232, 238}},
"黄龙": [][]int{{229, 231}},
"黄武": [][]int{{222, 229}},
}
}
func wuEras() []Era {
return []Era{
{
Year: 277,
Emperor: "吴末帝",
Nianhao: "天纪",
Dynasty: "吴",
},
{
Year: 276,
Emperor: "吴末帝",
OtherNianHaoStart: "天玺",
Dynasty: "吴",
},
{
Year: 275,
Emperor: "吴末帝",
OtherNianHaoStart: "天册",
Dynasty: "吴",
},
{
Year: 272,
Emperor: "吴末帝",
Nianhao: "凤凰",
Dynasty: "吴",
},
{
Year: 269,
Emperor: "吴末帝",
OtherNianHaoStart: "建衡",
Dynasty: "吴",
},
{
Year: 266,
Emperor: "吴末帝",
OtherNianHaoStart: "宝鼎",
Dynasty: "吴",
},
{
Year: 265,
Emperor: "吴末帝",
OtherNianHaoStart: "甘露",
Dynasty: "吴",
},
{
Year: 264,
Emperor: "吴末帝",
OtherNianHaoStart: "元兴",
Dynasty: "吴",
},
{
Year: 258,
Emperor: "吴景帝",
OtherNianHaoStart: "永安",
Dynasty: "吴",
},
{
Year: 256,
Emperor: "吴景帝",
OtherNianHaoStart: "太平",
Dynasty: "吴",
},
{
Year: 254,
Emperor: "吴景帝",
Nianhao: "五凤",
Dynasty: "吴",
},
{
Year: 252,
Emperor: "吴景帝",
OtherNianHaoStart: "建兴",
Dynasty: "吴",
},
{
Year: 251,
Emperor: "吴大帝",
OtherNianHaoStart: "太元",
Dynasty: "吴",
},
{
Year: 238,
Emperor: "吴大帝",
OtherNianHaoStart: "赤乌",
Dynasty: "吴",
},
{
Year: 232,
Emperor: "吴大帝",
Nianhao: "嘉禾",
Dynasty: "吴",
},
{
Year: 229,
Emperor: "吴大帝",
OtherNianHaoStart: "黄龙",
Dynasty: "吴",
},
{
Year: 222,
Emperor: "吴大帝",
Nianhao: "黄武",
Dynasty: "吴",
},
}
}
func innerSolarToLunarSanGuo(date Time) Time {
year := date.solarTime.Year()
month := int(date.solarTime.Month())
day := date.solarTime.Day()
if year >= 221 && year <= 263 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, shuCals)
date.lunars = append(date.lunars, LunarTime{
solarDate: date.solarTime,
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
desc: ldesc,
comment: "",
ganzhiMonth: ganzhiMonth,
eras: innerEras(lyear, shuEras),
})
}
if year >= 222 && year <= 280 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, wuCals)
date.lunars = append(date.lunars, LunarTime{
solarDate: date.solarTime,
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
desc: ldesc,
ganzhiMonth: ganzhiMonth,
comment: "",
eras: innerEras(lyear, wuEras),
})
}
return date
}