You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DateTimeFormatter多模式组合解析失效,请求技术指导

问题原因分析

当你把两个可选模式用[]组合时,DateTimeFormatter会按从左到右的顺序尝试匹配模式。对于输入2023-08-15T12:34:56.789123,第一个模式[yyyy-MM-dd'T'HH:mm:ss.SSS]会先匹配到前23个字符(即2023-08-15T12:34:56.789),此时解析器认为已匹配成功,但输入字符串还剩123未被处理,触发了DateTimeParseException(默认要求完全解析整个输入文本)。

而单独测试时,每个模式都能完全匹配对应输入,因此不会报错。

解决方案

方法1:调整可选模式的顺序

把匹配更长小数位的模式放在前面,让解析器优先尝试匹配完整的6位小数输入,匹配失败再尝试3位的:

private static final DateTimeFormatter dateTimeFormats = DateTimeFormatter.ofPattern(
        "[yyyy-MM-dd'T'HH:mm:ss.SSSSSS]" + // 先尝试匹配6位小数
        "[yyyy-MM-dd'T'HH:mm:ss.SSS]"      // 再尝试3位小数
);

方法2:使用DateTimeFormatterBuilder构建(更清晰可控)

用optionalStart()和optionalEnd()明确定义可选部分,同样注意顺序:

private static final DateTimeFormatter dateTimeFormats = new DateTimeFormatterBuilder()
        .appendPattern("yyyy-MM-dd'T'HH:mm:ss")
        .optionalStart()
            .appendPattern(".SSSSSS") // 优先匹配6位小数
        .optionalEnd()
        .optionalStart()
            .appendPattern(".SSS")    // 再匹配3位小数
        .optionalEnd()
        .toFormatter();

验证效果

修改后运行测试代码,两个输入都能被正确解析,不会抛出异常。

内容的提问来源于stack exchange,提问作者Sahib Yar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 02:43:15