chinabugotech/hutool · error · IllegalArgumentException
只支持1900-2100之间的日期获取节气
Error message
只支持1900-2100之间的日期获取节气
What it means
Error "只支持1900-2100之间的日期获取节气" thrown in chinabugotech/hutool.
Source
Thrown at hutool-core/src/main/java/cn/hutool/core/date/chinese/SolarTerms.java:182
* @param year 公历年
* @param mouth 公历月,从1开始
* @param day 公历日,从1开始
* @return 返回指定年月日所处的节气,若不是一个节气则返回空字符串
*/
public static String getTerm(int year, int mouth, int day) {
return getTerm(LocalDate.of(year, mouth, day));
}
/**
* 根据年月日获取节气, 内部方法,不对月和日做有效校验
* @param year 公历年
* @param mouth 公历月,从1开始
* @param day 公历日,从1开始
* @return 返回指定年月日所处的节气,若不是一个节气则返回空字符串
*/
private static String getTermInternal(int year, int mouth, int day) {
if (year < 1900 || year > 2100) {
throw new IllegalArgumentException("只支持1900-2100之间的日期获取节气");
}
final String termTable = S_TERM_INFO[year - 1900];
// 节气速查表中每5个字符含有4个节气,通过月份直接计算偏移
final int segment = (mouth + 1) / 2 - 1;
final int termInfo = Integer.parseInt(termTable.substring(segment * 5, (segment + 1) * 5), 16);
final String termInfoStr = String.valueOf(termInfo);
final String[] segmentTable = new String[4];
segmentTable[0] = termInfoStr.substring(0, 1);
segmentTable[1] = termInfoStr.substring(1, 3);
segmentTable[2] = termInfoStr.substring(3, 4);
segmentTable[3] = termInfoStr.substring(4, 6);
// 奇数月份的节气在前2个,偶数月份的节气在后两个
final int segmentOffset = (mouth & 1) == 1 ? 0 : 2;
View on GitHub (pinned to 8870454b2a)
Solutions
- Only request solar terms for dates between years 1900 and 2100.
- Clamp or validate the year before calling the solar-term lookup.
When it happens
Trigger: Thrown at hutool-core/src/main/java/cn/hutool/core/date/chinese/SolarTerms.java:182 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of chinabugotech/hutool@8870454b2a (2026-08-14).
Data as JSON: /api/errors/8f0906cb989f3d05.
Report an issue: GitHub.