1. 补充农历覆盖到公元前104年

2. 农历信息中包含君主、年号、朝代
3. 丰富一些算法,修正一些问题
This commit is contained in:
2025-09-15 20:55:38 +08:00
parent 438f1700c7
commit d6b6452304
18 changed files with 7048 additions and 458 deletions
+85
View File
@@ -132,3 +132,88 @@ func magicNumberSpilt(magic int32) (uint16, uint8) {
upper = uint16(magic >> 8)
return upper, lower
}
func TestGetJQTime(t *testing.T) {
originalFunc := func(Year, Angle int) float64 { //节气时间
var j int = 1
var Day int
var tp float64
if Angle%2 == 0 {
Day = 18
} else {
Day = 3
}
if Angle%10 != 0 {
tp = float64(Angle+15.0) / 30.0
} else {
tp = float64(Angle) / 30.0
}
Month := 3 + tp
if Month > 12 {
Month -= 12
}
JD1 := JDECalc(int(Year), int(Month), float64(Day))
if Angle == 0 {
Angle = 360
}
for i := 0; i < j; i++ {
for {
JD0 := JD1
stDegree := JQLospec(JD0, float64(Angle)) - float64(Angle)
stDegreep := (JQLospec(JD0+0.000005, float64(Angle)) - JQLospec(JD0-0.000005, float64(Angle))) / 0.00001
JD1 = JD0 - stDegree/stDegreep
if math.Abs(JD1-JD0) <= 0.00001 {
break
}
}
JD1 -= 0.001
}
JD1 += 0.001
return TD2UT(JD1, false)
}
// 测试数据:年份从1900-2200抽样,角度覆盖关键值
testCases := []struct {
year, angle int
}{
// 边界年份
{1900, 0}, {1900, 15}, {1900, 30}, {1900, 45}, {1900, 90},
{1900, 180}, {1900, 270}, {1900, 360},
// 中间年份抽样
{1950, 0}, {1950, 30}, {1950, 90}, {1950, 180}, {1950, 270},
{2000, 0}, {2000, 15}, {2000, 45}, {2000, 90}, {2000, 360},
{2023, 0}, {2023, 30}, {2023, 90}, {2023, 180}, {2023, 270},
// 未来年份抽样
{2100, 0}, {2100, 15}, {2100, 30}, {2100, 45}, {2100, 90},
{2100, 180}, {2100, 270}, {2100, 360},
{2200, 0}, {2200, 30}, {2200, 90}, {2200, 180}, {2200, 270},
}
// 执行测试
allPassed := true
for _, tc := range testCases {
originalResult := originalFunc(tc.year, tc.angle)
optimizedResult := GetJQTime(tc.year, tc.angle)
diff := math.Abs(originalResult - optimizedResult)
if diff > 1e-10 {
t.Errorf("测试失败: year=%d, angle=%d\n原始结果: %.15f\n优化结果: %.15f\n差异: %.15f",
tc.year, tc.angle, originalResult, optimizedResult, diff)
allPassed = false
} else {
t.Logf("测试通过: year=%d, angle=%d, 结果: %.15f",
tc.year, tc.angle, optimizedResult)
}
}
if allPassed {
t.Log("所有测试用例通过!优化函数与原始函数结果完全一致")
}
}
func TestJQ(t *testing.T) {
fmt.Println(GetJQTime(-721, 15))
}