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

917 lines
19 KiB
Go

package calendar
// 后秦
func houQinCals() map[int]uint32 {
return map[int]uint32{
384: 2862622464,
385: 3042089728,
386: 2874158592,
387: 1431315456,
388: 2863175936,
389: 1788881664,
390: 2874482688,
391: 2863674112,
392: 1431316736,
393: 1789631744,
394: 1453338624,
395: 2863670528,
396: 1431411456,
397: 3578801152,
398: 1454219776,
399: 1432368384,
400: 2862623232,
401: 3579059712,
402: 2907713792,
403: 1432364800,
404: 2863307776,
405: 2862624256,
406: 2907710208,
407: 1432951040,
408: 1431317504,
409: 2863472640,
410: 1520448256,
411: 2865768448,
412: 1432034816,
413: 1431318528,
414: 1520444672,
415: 2865863168,
416: 2863672576,
417: 1431708160,
}
}
func houQinEras() []Era {
return []Era{
{
Year: 416,
Emperor: "后秦末主",
OtherNianHaoStart: "永和",
Dynasty: "后秦",
},
{
Year: 399,
Emperor: "后秦文桓帝",
OtherNianHaoStart: "弘始",
Dynasty: "后秦",
},
{
Year: 394,
Emperor: "后秦文桓帝",
OtherNianHaoStart: "皇初",
Dynasty: "后秦",
},
{
Year: 386,
Emperor: "后秦武昭帝",
OtherNianHaoStart: "建初",
Dynasty: "后秦",
},
{
Year: 384,
Emperor: "后秦武昭帝",
Nianhao: "白雀",
Dynasty: "后秦",
},
}
}
func houQinEraMap() map[string][][]int {
return map[string][][]int{
"永和": [][]int{{416, 417}},
"弘始": [][]int{{399, 416}},
"皇初": [][]int{{394, 399}},
"建初": [][]int{{386, 394}},
"白雀": [][]int{{384, 386}},
}
}
// 北魏、西魏、北周、隋
func weiZhouSuiCals() map[int]uint32 {
return map[int]uint32{
398: 1454219776,
399: 1436562688,
400: 2862623232,
401: 3579059712,
402: 2907713792,
403: 1436559104,
404: 2863307776,
405: 2862624256,
406: 2907710208,
407: 1437145344,
408: 1431317504,
409: 2863472640,
410: 1520448256,
411: 2874157056,
412: 1432034816,
413: 1431318528,
414: 1520444672,
415: 2874251776,
416: 2863672576,
417: 1431708160,
418: 3041932288,
419: 1453337088,
420: 2863931136,
421: 2862625024,
422: 3041928704,
423: 1453988864,
424: 1432366848,
425: 2862621440,
426: 3041957888,
427: 2907712256,
428: 1433215232,
429: 1431319296,
430: 2862622720,
431: 2907905280,
432: 2865770496,
433: 1431315712,
434: 1789499904,
435: 1520446720,
436: 2866160128,
437: 2862625792,
438: 3578800384,
439: 1521262336,
440: 1436561920,
441: 2862622208,
442: 3578960640,
443: 3041930752,
444: 1436558336,
445: 2863175680,
446: 2862623488,
447: 3042254848,
448: 2874159872,
449: 1431316480,
450: 2863373568,
451: 1788882944,
452: 2874156288,
453: 1432033792,
454: 1431317760,
455: 1520443904,
456: 2874218240,
457: 2863671552,
458: 1431641856,
459: 3041931520,
460: 1453336320,
461: 2863897344,
462: 2862624256,
463: 3041927936,
464: 1453988096,
465: 1432365824,
466: 2862620672,
467: 3041957120,
468: 2907711488,
469: 1433181440,
470: 1431318528,
471: 1788880128,
472: 2907904512,
473: 2865769472,
474: 1431314944,
475: 1789499136,
476: 1520445952,
477: 2866126336,
478: 2862625024,
479: 3578799616,
480: 1521196032,
481: 1436560896,
482: 2862621440,
483: 3578927104,
484: 3041929984,
485: 1436557312,
486: 2863174912,
487: 2862622720,
488: 3042221312,
489: 2874158848,
490: 1431315712,
491: 2863307264,
492: 1788882176,
493: 2874155264,
494: 1431901952,
495: 1431316992,
496: 1789763328,
497: 1453338880,
498: 2863670784,
499: 1431575552,
500: 3578801664,
501: 1453335296,
502: 2863798272,
503: 2862623488,
504: 3579191296,
505: 2907714048,
506: 1432365056,
507: 2863439104,
508: 2862624768,
509: 2907710464,
510: 1433082368,
511: 1431317760,
512: 2862621184,
513: 2907772416,
514: 2865768704,
515: 1431641856,
516: 3578802432,
517: 1520444928,
518: 2865994496,
519: 2862624256,
520: 3578798848,
521: 1521129472,
522: 1436560128,
523: 2863669248,
524: 1431377408,
525: 3041928960,
526: 1437441280,
527: 1432367104,
528: 2862621952,
529: 3042154752,
530: 2874158080,
531: 1432363520,
532: 2863240960,
533: 1788881152,
534: 2874547712,
535: 2865770752,
536: 1431316224,
537: 1789696768,
538: 1453338112,
539: 2865767168,
540: 1431476480,
541: 3578800640,
542: 1453334528,
543: 2865796352,
544: 2862622720,
545: 3579124736,
546: 2907713280,
547: 1436558592,
548: 2863372800,
549: 2862623744,
550: 2907709696,
551: 1437210368,
552: 1431316992,
553: 2863537664,
554: 1520447744,
555: 2874156544,
556: 1432099840,
557: 1431318016,
558: 1520444160,
559: 2874316800,
560: 2863672064,
561: 1431314432,
562: 1520997632,
563: 1453336576,
564: 2863963392,
565: 2863673088,
566: 1431315712,
567: 2863405568,
568: 1788882176,
569: 2874155264,
570: 1431967488,
571: 1431316992,
572: 1788878592,
573: 2874184448,
574: 2865767936,
575: 1431641088,
576: 3578801664,
577: 1453335296,
578: 2865960960,
579: 2865769216,
580: 1431314688,
581: 2863240448,
582: 1520445440,
583: 2866158848,
584: 1788882944,
585: 2907710464,
586: 1433147904,
587: 1431317760,
588: 1788879360,
589: 2907837952,
}
}
func weiZhouSuiEras() []Era {
return []Era{
{
Year: 601,
Emperor: "隋文帝",
Nianhao: "仁寿",
Dynasty: "隋",
},
{
Year: 581,
Emperor: "隋文帝",
Nianhao: "开皇",
Dynasty: "隋",
},
{
Year: 579,
Emperor: "北周静帝",
Nianhao: "大象",
Dynasty: "北周",
},
{
Year: 578,
Emperor: "北周宣帝",
OtherNianHaoStart: "宣政",
Dynasty: "北周",
},
{
Year: 572,
Emperor: "北周武帝",
OtherNianHaoStart: "建德",
Dynasty: "北周",
},
{
Year: 566,
Emperor: "北周武帝",
Nianhao: "天和",
Dynasty: "北周",
},
{
Year: 561,
Emperor: "北周武帝",
Nianhao: "保定",
Dynasty: "北周",
},
{
Year: 559,
Emperor: "北周明帝",
Nianhao: "武成",
Dynasty: "北周",
},
{
Year: 557,
Emperor: "北周明帝",
Nianhao: "北周明帝",
Dynasty: "北周",
},
{
Year: 554,
Emperor: "西魏恭帝",
Nianhao: "西魏恭帝",
Dynasty: "西魏",
},
{
Year: 552,
Emperor: "西魏元钦",
Nianhao: "西魏元钦",
Dynasty: "西魏",
},
{
Year: 535,
Emperor: "西魏文帝",
Nianhao: "大统",
Dynasty: "西魏",
},
{
Year: 532,
Emperor: "北魏孝武帝",
Nianhao: "永熙",
Dynasty: "北魏",
},
{
Year: 531,
Emperor: "北魏节闵帝",
OtherNianHaoStart: "中兴",
Dynasty: "北魏",
},
{
Year: 530,
Emperor: "北魏节闵帝",
OtherNianHaoStart: "建明",
Dynasty: "北魏",
},
{
Year: 528,
Emperor: "北魏孝庄帝",
OtherNianHaoStart: "武泰",
Dynasty: "北魏",
},
{
Year: 528,
Emperor: "北魏孝庄帝",
OtherNianHaoStart: "建义",
Dynasty: "北魏",
},
{
Year: 528,
Emperor: "北魏孝庄帝",
Nianhao: "永安",
Dynasty: "北魏",
},
{
Year: 525,
Emperor: "北魏孝明帝",
OtherNianHaoStart: "孝昌",
Dynasty: "北魏",
},
{
Year: 520,
Emperor: "北魏孝明帝",
OtherNianHaoStart: "正光",
Dynasty: "北魏",
},
{
Year: 518,
Emperor: "北魏孝明帝",
OtherNianHaoStart: "神龟",
Dynasty: "北魏",
},
{
Year: 516,
Emperor: "北魏孝明帝",
Nianhao: "熙平",
Dynasty: "北魏",
},
{
Year: 512,
Emperor: "北魏宣武帝",
OtherNianHaoStart: "延昌",
Dynasty: "北魏",
},
{
Year: 508,
Emperor: "北魏宣武帝",
OtherNianHaoStart: "永平",
Dynasty: "北魏",
},
{
Year: 504,
Emperor: "北魏宣武帝",
Nianhao: "正始",
Dynasty: "北魏",
},
{
Year: 500,
Emperor: "北魏宣武帝",
Nianhao: "景明",
Dynasty: "北魏",
},
{
Year: 477,
Emperor: "北魏孝文帝",
Nianhao: "太和",
Dynasty: "北魏",
},
{
Year: 476,
Emperor: "北魏孝文帝",
OtherNianHaoStart: "承明",
Dynasty: "北魏",
},
{
Year: 471,
Emperor: "北魏孝文帝",
OtherNianHaoStart: "延兴",
Dynasty: "北魏",
},
{
Year: 467,
Emperor: "北魏献文帝",
OtherNianHaoStart: "皇兴",
Dynasty: "北魏",
},
{
Year: 466,
Emperor: "北魏献文帝",
OtherNianHaoStart: "天安",
Dynasty: "北魏",
},
{
Year: 460,
Emperor: "北魏文成帝",
Nianhao: "和平",
Dynasty: "北魏",
},
{
Year: 455,
Emperor: "北魏文成帝",
OtherNianHaoStart: "太安",
Dynasty: "北魏",
},
{
Year: 454,
Emperor: "北魏文成帝",
OtherNianHaoStart: "兴光",
Dynasty: "北魏",
},
{
Year: 452,
Emperor: "北魏文成帝",
OtherNianHaoStart: "兴安",
Dynasty: "北魏",
},
{
Year: 451,
Emperor: "北魏太武帝",
OtherNianHaoStart: "正平",
Dynasty: "北魏",
},
{
Year: 440,
Emperor: "北魏太武帝",
OtherNianHaoStart: "太平真君",
Dynasty: "北魏",
},
{
Year: 435,
Emperor: "北魏太武帝",
Nianhao: "太延",
Dynasty: "北魏",
},
{
Year: 432,
Emperor: "北魏太武帝",
Nianhao: "延和",
Dynasty: "北魏",
},
{
Year: 428,
Emperor: "北魏太武帝",
OtherNianHaoStart: "神䴥",
Dynasty: "北魏",
},
{
Year: 424,
Emperor: "北魏太武帝",
Nianhao: "始光",
Dynasty: "北魏",
},
{
Year: 416,
Emperor: "北魏明元帝",
OtherNianHaoStart: "泰常",
Dynasty: "北魏",
},
{
Year: 414,
Emperor: "北魏明元帝",
Nianhao: "神瑞",
Dynasty: "北魏",
},
{
Year: 409,
Emperor: "北魏明元帝",
OtherNianHaoStart: "永兴",
Dynasty: "北魏",
},
{
Year: 404,
Emperor: "北魏道武帝",
OtherNianHaoStart: "天赐",
Dynasty: "北魏",
},
{
Year: 398,
Emperor: "北魏道武帝",
Nianhao: "天兴",
Dynasty: "北魏",
},
{
Year: 396,
Emperor: "北魏道武帝",
OtherNianHaoStart: "皇始",
Dynasty: "北魏",
},
{
Year: 386,
Emperor: "北魏道武帝",
Nianhao: "登国",
Dynasty: "北魏",
},
}
}
func weiZhouSuiEraMap() map[string][][]int {
return map[string][][]int{
//"开皇": [][]int{{581, 600}},
"大象": [][]int{{579, 580}},
"宣政": [][]int{{578, 578}},
"建德": [][]int{{572, 578}},
"天和": [][]int{{566, 572}},
"保定": [][]int{{561, 565}},
"武成": [][]int{{559, 560}},
"北周明帝": [][]int{{557, 558}},
"西魏恭帝": [][]int{{554, 556}},
"西魏元钦": [][]int{{552, 553}},
"大统": [][]int{{535, 551}},
"永熙": [][]int{{532, 534}},
"中兴": [][]int{{531, 531}},
"建明": [][]int{{530, 531}},
"永安": [][]int{{528, 530}},
"建义": [][]int{{528, 528}},
"武泰": [][]int{{528, 528}},
"孝昌": [][]int{{525, 527}},
"正光": [][]int{{520, 525}},
"神龟": [][]int{{518, 520}},
"熙平": [][]int{{516, 518}},
"延昌": [][]int{{512, 515}},
"永平": [][]int{{508, 512}},
"正始": [][]int{{504, 508}},
"景明": [][]int{{500, 503}},
"太和": [][]int{{477, 499}},
"承明": [][]int{{476, 476}},
"延兴": [][]int{{471, 476}},
"皇兴": [][]int{{467, 471}},
"天安": [][]int{{466, 467}},
"和平": [][]int{{460, 466}},
"太安": [][]int{{455, 459}},
"兴光": [][]int{{454, 455}},
"兴安": [][]int{{452, 454}},
"正平": [][]int{{451, 452}},
"太平真君": [][]int{{440, 451}},
"太延": [][]int{{435, 440}},
"延和": [][]int{{432, 434}},
"神䴥": [][]int{{428, 431}},
"始光": [][]int{{424, 428}},
"泰常": [][]int{{416, 423}},
"神瑞": [][]int{{414, 416}},
"永兴": [][]int{{409, 413}},
"天赐": [][]int{{404, 409}},
"天兴": [][]int{{398, 404}},
"皇始": [][]int{{396, 397}},
"登国": [][]int{{386, 396}},
}
}
func beiLiangCals() map[int]uint32 {
return map[int]uint32{
// currect here
412: 1432100352,
413: 1431318528,
414: 1520444672,
415: 2865928704,
416: 2863672576,
417: 1431314944,
418: 1521030912,
419: 1436559872,
420: 2864029440,
421: 2862625024,
422: 3041928704,
423: 1437309952,
424: 1432366848,
425: 2862621440,
426: 3042056192,
427: 2874157824,
428: 1432363264,
429: 2863174912,
430: 2862622720,
431: 2874449152,
432: 2865770496,
433: 1431315712,
434: 1789565440,
435: 1453337856,
436: 2865766912,
437: 1431377664,
438: 3578800384,
439: 1454219008,
}
}
func beiLiangEras() []Era {
return []Era{
{
Year: 433,
Emperor: "北凉哀王",
OtherNianHaoStart: "承和",
Dynasty: "北凉",
},
{
Year: 431,
Emperor: "北凉哀王",
OtherNianHaoStart: "义和",
Dynasty: "北凉",
},
{
Year: 428,
Emperor: "北凉哀王",
OtherNianHaoStart: "承玄",
Dynasty: "北凉",
},
{
Year: 412,
Emperor: "北凉武宣王",
OtherNianHaoStart: "玄始",
Dynasty: "北凉",
},
{
Year: 401,
Emperor: "北凉武宣王",
OtherNianHaoStart: "永安",
Dynasty: "北凉",
},
{
Year: 399,
Emperor: "北凉武宣王",
OtherNianHaoStart: "天玺",
Dynasty: "北凉",
},
{
Year: 397,
Emperor: "北凉武宣王",
Nianhao: "神玺",
Dynasty: "北凉",
},
}
}
func beiLiangEraMap() map[string][][]int {
return map[string][][]int{
"承和": [][]int{{433, 439}},
"义和": [][]int{{431, 433}},
"承玄": [][]int{{428, 431}},
"玄始": [][]int{{412, 428}},
"永安": [][]int{{401, 412}},
"天玺": [][]int{{399, 401}},
"神玺": [][]int{{397, 399}},
}
}
func dongWeiBeiQiCals() map[int]uint32 {
return map[int]uint32{
534: 2874547712,
535: 2865770752,
536: 1431316224,
537: 1789696768,
538: 1453338112,
539: 2865767168,
540: 1431476480,
541: 3578800640,
542: 1453334528,
543: 2865796352,
544: 2862622720,
545: 3579124736,
546: 2907713280,
547: 1436558592,
548: 2863372800,
549: 2862623744,
550: 2907709696,
551: 1432950528,
552: 1431316992,
553: 2863504896,
554: 1520447744,
555: 2865767936,
556: 1432099840,
557: 1431318016,
558: 1520444160,
559: 2865895424,
560: 2863672064,
561: 1431707648,
562: 3041931776,
563: 1436559360,
564: 2863963392,
565: 2862624512,
566: 3041928192,
567: 1437276672,
568: 1432366336,
569: 2862620928,
570: 3041990144,
571: 2874157312,
572: 1433247488,
573: 1431318784,
574: 1788880384,
575: 2874415872,
576: 2865769984,
577: 1431315200,
}
}
func dongWeiBeiQiEras() []Era {
return []Era{
{
Year: 577,
Emperor: "北齐后主",
Nianhao: "承光",
Dynasty: "北齐",
},
{
Year: 570,
Emperor: "北齐后主",
Nianhao: "武平",
Dynasty: "北齐",
},
{
Year: 565,
Emperor: "北齐后主",
OtherNianHaoStart: "天统",
Dynasty: "北齐",
},
{
Year: 562,
Emperor: "北齐武成帝",
OtherNianHaoStart: "河清",
Dynasty: "北齐",
},
{
Year: 561,
Emperor: "北齐武成帝",
OtherNianHaoStart: "太宁",
Dynasty: "北齐",
},
{
Year: 560,
Emperor: "北齐孝昭帝",
OtherNianHaoStart: "皇建",
Dynasty: "北齐",
},
{
Year: 550,
Emperor: "北齐文宣帝",
Nianhao: "天保",
Dynasty: "北齐",
},
{
Year: 543,
Emperor: "东魏孝静帝",
Nianhao: "武定",
Dynasty: "东魏",
},
{
Year: 539,
Emperor: "东魏孝静帝",
OtherNianHaoStart: "兴和",
Dynasty: "东魏",
},
{
Year: 538,
Emperor: "东魏孝静帝",
OtherNianHaoStart: "元象",
Dynasty: "东魏",
},
{
Year: 534,
Emperor: "东魏孝静帝",
Nianhao: "天平",
Dynasty: "东魏",
},
}
}
func dongWeiBeiQiEraMap() map[string][][]int {
return map[string][][]int{
"承光": [][]int{{577, 577}},
"武平": [][]int{{570, 576}},
"天统": [][]int{{565, 569}},
"河清": [][]int{{562, 565}},
"太宁": [][]int{{561, 562}},
"皇建": [][]int{{560, 561}},
"天保": [][]int{{550, 560}},
"武定": [][]int{{543, 549}},
"兴和": [][]int{{539, 542}},
"元象": [][]int{{538, 539}},
"天平": [][]int{{534, 538}},
}
}
func innerSolarToLunarNanBeiChao(date Time) Time {
year := date.solarTime.Year()
month := int(date.solarTime.Month())
day := date.solarTime.Day()
if year >= 384 && year <= 417 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, houQinCals)
date.lunars = append(date.lunars, LunarTime{
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
desc: ldesc,
comment: "",
ganzhiMonth: ganzhiMonth,
eras: innerEras(lyear, houQinEras),
})
}
if year >= 398 && year <= 589 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, weiZhouSuiCals)
date.lunars = append(date.lunars, LunarTime{
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
desc: ldesc,
comment: "",
ganzhiMonth: ganzhiMonth,
eras: innerEras(lyear, weiZhouSuiEras),
})
}
if year >= 397 && year <= 439 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, beiLiangCals)
date.lunars = append(date.lunars, LunarTime{
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
ganzhiMonth: ganzhiMonth,
desc: ldesc,
comment: "",
eras: innerEras(lyear, beiLiangEras),
})
}
if year >= 534 && year <= 577 {
lyear, lmonth, ganzhiMonth, lday, isLeap, ldesc := rapidLunarHan2Qing(year, month, day, 0, dongWeiBeiQiCals)
date.lunars = append(date.lunars, LunarTime{
year: lyear,
month: lmonth,
day: lday,
leap: isLeap,
desc: ldesc,
ganzhiMonth: ganzhiMonth,
comment: "",
eras: innerEras(lyear, dongWeiBeiQiEras),
})
}
return date
}