chinabugotech/hutool · error · DateException

Invalid format: [{}]

Error message

Invalid format: [{}]

What it means

Error "Invalid format: [{}]" thrown in chinabugotech/hutool.

Source

Thrown at hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java:903

		if (StrUtil.contains(iso8601String, 'Z')) {
			if (length == DatePattern.UTC_PATTERN.length() - 4) {
				// 格式类似:2018-09-13T05:34:31Z,-4表示减去4个单引号的长度
				return parse(iso8601String, DatePattern.UTC_FORMAT);
			}

			final int patternLength = DatePattern.UTC_MS_PATTERN.length();
			// 格式类似:2018-09-13T05:34:31.999Z,-4表示减去4个单引号的长度
			// -4 ~ -6范围表示匹配毫秒1~3位的情况
			if (length <= patternLength && length >= patternLength - 6) {
				// issue#I7H34N,支持最多6位毫秒
				return parse(iso8601String, DatePattern.UTC_MS_FORMAT);
			}
		} else if (StrUtil.contains(iso8601String, '+')) {
			// 去除类似2019-06-01T19:45:43 +08:00加号前的空格
			iso8601String = iso8601String.replace(" +", "+");
			final String zoneOffset = StrUtil.subAfter(iso8601String, '+', true);
			if (StrUtil.isBlank(zoneOffset)) {
				throw new DateException("Invalid format: [{}]", iso8601String);
			}
			if (false == StrUtil.contains(zoneOffset, ':')) {
				// +0800转换为+08:00
				if (zoneOffset.length() < 2) {
					throw new DateException("Invalid format: [{}]", iso8601String);
				}
				final String pre = StrUtil.subBefore(iso8601String, '+', true);
				iso8601String = pre + "+" + zoneOffset.substring(0, 2) + ":" + "00";
			}

			if (StrUtil.contains(iso8601String, CharUtil.DOT)) {
				// 带毫秒,格式类似:2018-09-13T05:34:31.999+08:00
				iso8601String = normalizeMillSeconds(iso8601String, ".", "+");
				return parse(iso8601String, DatePattern.UTC_MS_WITH_XXX_OFFSET_FORMAT);
			} else if (iso8601String.length() == 22 && StrUtil.count(iso8601String, ':') == 2) {
				// 精确到分钟,格式类似:2025-07-28T20:00+08:00
				return parse(iso8601String, DatePattern.UTC_SIMPLE_MINUTE_WITH_XXX_OFFSET_FORMAT);
			} else {

View on GitHub (pinned to 8870454b2a)

Solutions

  1. Provide a date format pattern matching the input string, e.g. "yyyy-MM-dd HH:mm:ss".
  2. Check that the pattern uses valid pattern letters (y, M, d, H, m, s) and matches the input length.
  3. Use DateUtil.parse without a pattern to auto-detect common formats.

When it happens

Trigger: Thrown at hutool-core/src/main/java/cn/hutool/core/date/DateUtil.java:903 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/2aca171159352c27. Report an issue: GitHub.