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

  1. Only request solar terms for dates between years 1900 and 2100.
  2. 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.