• feat(calendar): 扩展先秦至秦汉古历支持
- 新增显式古历 API,支持先秦古历与秦汉颛顼历选择 - 将默认公农历转换范围扩展至 -721..3000 - 支持后九月解析、负年份干支日和古历法相符节气 - 补充秦汉、先秦、交接边界和节气回归测试
This commit is contained in:
@@ -358,10 +358,35 @@ func innerParseLunar(lunar string) ([]time.Time, error) {
|
||||
if err != nil {
|
||||
return []time.Time{}, err
|
||||
}
|
||||
if date.houMonth && date.comment != "" {
|
||||
return nil, fmt.Errorf("未找到对应日期")
|
||||
}
|
||||
if date.year != 0 && date.comment == "" {
|
||||
if date.year < -103 || date.year > 3000 {
|
||||
if date.year < ancientBoundaryMinYear || date.year > 3000 {
|
||||
return nil, fmt.Errorf("年份超出范围")
|
||||
}
|
||||
if date.houMonth && (date.year < qinHanMinYear || date.year > qinHanMaxYear) {
|
||||
return nil, fmt.Errorf("未找到对应日期")
|
||||
}
|
||||
if date.year < qinHanMinYear {
|
||||
d, ok := lunarToSolarAncientDefault(date.year, date.month, date.day, date.leap)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("未找到对应日期")
|
||||
}
|
||||
return []time.Time{d.Solar()}, nil
|
||||
}
|
||||
if date.year <= qinHanMaxYear {
|
||||
if date.year == qinHanMaxYear {
|
||||
if d, ok := lunarToSolarHanQingDefault(date.year, date.month, date.day, date.leap); ok {
|
||||
return []time.Time{d.Solar()}, nil
|
||||
}
|
||||
}
|
||||
d, ok := rapidSolarQinHan(date.year, date.month, date.day, date.leap)
|
||||
if !ok {
|
||||
return nil, fmt.Errorf("未找到对应日期")
|
||||
}
|
||||
return []time.Time{d}, nil
|
||||
}
|
||||
if date.year <= 1912 {
|
||||
d := rapidSolarHan2Qing(date.year, date.month, date.day, date.leap, yearDiffLunar(date.year, date.month, date.day), nil)
|
||||
return []time.Time{d}, nil
|
||||
|
||||
Reference in New Issue
Block a user