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

408 lines
8.6 KiB
Go

package calendar
func liaoJinYuanCals() map[int]uint32 {
return map[int]uint32{
949: 2996838400,
955: 1237097216,
958: 2858129152,
959: 1787832832,
961: 766088192,
964: 2574266112,
965: 1232086016,
973: 2464163072,
985: 3031177216,
986: 1788881664,
994: 3645910016,
999: 2775716864,
1001: 3530398464,
1012: 3579124224,
1015: 2513671936,
1020: 2992512000,
1021: 1787833856,
1024: 727723008,
1025: 2507153408,
1029: 1783730688,
1039: 3667270400,
1040: 3046125056,
1044: 2463113472,
1045: 3378156800,
1049: 2907710464,
1053: 2461767424,
1056: 1823052800,
1059: 2605723136,
1064: 3912439040,
1070: 1255156992,
1073: 2991597824,
1075: 3601470208,
1077: 2513836800,
1078: 2511351296,
1080: 2763790592,
1094: 728372224,
1105: 2733216256,
1113: 635048960,
1121: 1269470464,
1129: 2874414592,
1134: 3529513728,
1145: 3041761536,
1147: 3445629184,
1152: 1689265920,
1155: 1530929920,
1163: 3595576320,
1168: 2461018624,
1176: 628108288,
1178: 2839221504,
1184: 1264594176,
1198: 3040880384,
1207: 2904563200,
1209: 727721472,
1239: 1370498304,
1250: 3576701440,
1251: 1520769024,
1253: 1523588864,
1256: 2732596480,
1258: 3511690240,
1263: 2513447168,
1270: 3047528192,
1273: 1169888512,
1276: 1784254976,
}
}
func liaoJinYuanEras() []Era {
return []Era{
{
Year: 1264,
Emperor: "元世祖",
OtherNianHaoStart: "至元",
Dynasty: "元",
},
{
Year: 1260,
Emperor: "元世祖",
Nianhao: "中统",
Dynasty: "元",
},
{
Year: 1251,
Emperor: "元宪宗",
Nianhao: "元宪宗",
Dynasty: "元",
},
{
Year: 1249,
Emperor: "元定宗后",
Nianhao: "元定宗后",
Dynasty: "元",
},
{
Year: 1246,
Emperor: "元定宗",
Nianhao: "元定宗",
Dynasty: "元",
},
{
Year: 1242,
Emperor: "元太宗",
Nianhao: "元太宗后",
Dynasty: "元",
},
{
Year: 1234,
Emperor: "元太宗",
OtherNianHaoStart: "元太宗",
Dynasty: "元",
Offset: 5,
},
{
Year: 1232,
Emperor: "金哀宗",
Nianhao: "天兴",
Dynasty: "金",
},
{
Year: 1224,
Emperor: "金哀宗",
Nianhao: "正大",
Dynasty: "金",
},
{
Year: 1222,
Emperor: "金宣宗",
OtherNianHaoStart: "元光",
Dynasty: "金",
},
{
Year: 1217,
Emperor: "金宣宗",
OtherNianHaoStart: "兴定",
Dynasty: "金",
},
{
Year: 1213,
Emperor: "金宣宗",
OtherNianHaoStart: "贞佑",
Dynasty: "金",
},
{
Year: 1213,
Emperor: "金宣宗",
OtherNianHaoStart: "至宁",
Dynasty: "金",
},
{
Year: 1212,
Emperor: "金卫绍王",
OtherNianHaoStart: "崇庆",
Dynasty: "金",
},
{
Year: 1209,
Emperor: "金卫绍王",
Nianhao: "大安",
Dynasty: "金",
},
{
Year: 1201,
Emperor: "金章宗",
Nianhao: "泰和",
Dynasty: "金",
},
{
Year: 1196,
Emperor: "金章宗",
OtherNianHaoStart: "承安",
Dynasty: "金",
},
{
Year: 1190,
Emperor: "金章宗",
Nianhao: "明昌",
Dynasty: "金",
},
{
Year: 1161,
Emperor: "金世宗",
OtherNianHaoStart: "大定",
Dynasty: "金",
},
{
Year: 1156,
Emperor: "金海陵王",
OtherNianHaoStart: "正隆",
Dynasty: "金",
},
{
Year: 1153,
Emperor: "金海陵王",
OtherNianHaoStart: "贞元",
Dynasty: "金",
},
{
Year: 1149,
Emperor: "金海陵王",
OtherNianHaoStart: "天德",
Dynasty: "金",
},
{
Year: 1141,
Emperor: "金熙宗",
Nianhao: "皇统",
Dynasty: "金",
},
{
Year: 1138,
Emperor: "金熙宗",
Nianhao: "天眷",
Dynasty: "金",
},
{
Year: 1125,
Emperor: "金太宗",
OtherNianHaoStart: "天会",
Dynasty: "金",
Offset: 2,
},
{
Year: 1121,
Emperor: "辽天祚帝",
Nianhao: "保大",
Dynasty: "辽",
},
{
Year: 1111,
Emperor: "辽天祚帝",
Nianhao: "天庆",
Dynasty: "辽",
},
{
Year: 1101,
Emperor: "辽天祚帝",
OtherNianHaoStart: "乾统",
Dynasty: "辽",
},
{
Year: 1095,
Emperor: "辽道宗",
Nianhao: "寿昌",
Dynasty: "辽",
},
{
Year: 1085,
Emperor: "辽道宗",
Nianhao: "大安",
Dynasty: "辽",
},
{
Year: 1075,
Emperor: "辽道宗",
Nianhao: "大康",
Dynasty: "辽",
},
{
Year: 1065,
Emperor: "辽道宗",
Nianhao: "咸雍",
Dynasty: "辽",
},
{
Year: 1055,
Emperor: "辽道宗",
OtherNianHaoStart: "清宁",
Dynasty: "辽",
},
{
Year: 1032,
Emperor: "辽兴宗",
OtherNianHaoStart: "重熙",
Dynasty: "辽",
},
{
Year: 1031,
Emperor: "辽兴宗",
OtherNianHaoStart: "景福",
Dynasty: "辽",
},
{
Year: 1021,
Emperor: "辽圣宗",
OtherNianHaoStart: "太平",
Dynasty: "辽",
},
{
Year: 1012,
Emperor: "辽圣宗",
OtherNianHaoStart: "开泰",
Dynasty: "辽",
},
{
Year: 983,
Emperor: "辽圣宗",
OtherNianHaoStart: "统和",
Dynasty: "辽",
},
{
Year: 979,
Emperor: "辽景宗",
OtherNianHaoStart: "乾亨",
Dynasty: "辽",
},
{
Year: 969,
Emperor: "辽景宗",
OtherNianHaoStart: "保宁",
Dynasty: "辽",
},
{
Year: 951,
Emperor: "辽穆宗",
OtherNianHaoStart: "应历",
Dynasty: "辽",
},
{
Year: 947,
Emperor: "辽世宗",
OtherNianHaoStart: "天禄",
Dynasty: "辽",
},
{
Year: 947,
Emperor: "辽太宗",
Nianhao: "大同",
Dynasty: "辽",
},
{
Year: 939,
Emperor: "辽太宗",
OtherNianHaoStart: "会同",
Dynasty: "辽",
},
}
}
func liaoJinYuanEraMap() map[string][][]int {
return map[string][][]int{
"中统": [][]int{{1260, 1264}},
"元宪宗": [][]int{{1251, 1259}},
"元定宗后": [][]int{{1249, 1250}},
"元定宗": [][]int{{1246, 1248}},
"元太宗后": [][]int{{1242, 1245}},
"元太宗": [][]int{{1229, 1241}},
"天兴": [][]int{{1232, 1229}},
"正大": [][]int{{1224, 1231}},
"元光": [][]int{{1222, 1223}},
"兴定": [][]int{{1217, 1222}},
"贞佑": [][]int{{1213, 1217}},
"至宁": [][]int{{1213, 1213}},
"崇庆": [][]int{{1212, 1213}},
"泰和": [][]int{{1201, 1208}},
"承安": [][]int{{1196, 1200}},
"明昌": [][]int{{1190, 1196}},
"大定": [][]int{{1161, 1189}},
"正隆": [][]int{{1156, 1161}},
"贞元": [][]int{{1153, 1156}},
"天德": [][]int{{1149, 1153}},
"皇统": [][]int{{1141, 1149}},
"天眷": [][]int{{1138, 1140}},
"天会": [][]int{{1123, 1137}},
"保大": [][]int{{1121, 1125}},
"天庆": [][]int{{1111, 1120}},
"乾统": [][]int{{1101, 1110}},
"寿昌": [][]int{{1095, 1101}},
"大安": [][]int{{1085, 1094}, {1209, 1212}},
"大康": [][]int{{1075, 1084}},
"咸雍": [][]int{{1065, 1074}},
"清宁": [][]int{{1055, 1064}},
"重熙": [][]int{{1032, 1055}},
"景福": [][]int{{1031, 1032}},
"太平": [][]int{{1021, 1031}},
"开泰": [][]int{{1012, 1021}},
"统和": [][]int{{983, 1012}},
"乾亨": [][]int{{979, 983}},
"保宁": [][]int{{969, 979}},
"应历": [][]int{{951, 969}},
"天禄": [][]int{{947, 951}},
"大同": [][]int{{947, 947}},
"会同": [][]int{{939, 946}},
}
}
func innerSolarToLunarLiaoJinYuan(date Time) Time {
year := date.solarTime.Year()
month := int(date.solarTime.Month())
day := date.solarTime.Day()
if year >= 947 && year <= 1279 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, liaoJinYuanCals)
date.lunars = append(date.lunars, LunarTime{
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
desc: ldesc,
comment: "",
ganzhiMonth: ganzhiMonth,
eras: innerEras(lyear, liaoJinYuanEras),
})
}
return date
}