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

使用yyyyMMddHHmmssZ解析时间报错:无法获取OffsetDateTime

解决OffsetDateTime严格模式下解析时间字符串的异常

嘿,我来帮你排查这个时间解析的问题~

你遇到的DateTimeParseException,核心原因出在**严格解析模式(STRICT)**下DateTimeFormatter对年份模式的处理逻辑上:

  • 你用的yyyy代表的是「年时代(YearOfEra)」,它是基于纪年时代(比如公元前后)的年份表示;
  • 而OffsetDateTime在严格模式下,需要的是明确的「公元年(Year)」标识。

虽然在公元纪年里这两个数值看起来完全一样,但严格解析器不会自动将YearOfEra转换为Year,导致解析后的TemporalAccessor缺少构建OffsetDateTime所需的明确年份信息,最终抛出异常。

解决方案

把格式模式里的yyyy替换成uuuu就可以解决问题了。uuuu是Java时间API中专门用来表示公元年的模式符,在严格模式下能被OffsetDateTime正确识别。

修正后的代码如下:

import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.time.chrono.IsoChronology;

public class Main {
    public static void main(String[] args) {
        System.out.println("********************" + OffsetDateTime
                .parse("20140726080320+0400", DateTimeFormatter.ofPattern("uuuuMMddHHmmssZ")
                        .withChronology(IsoChronology.INSTANCE)
                        .withResolverStyle(ResolverStyle.STRICT))
                .toEpochSecond());
    }
}

补充说明

如果你不需要这么严格的解析规则,把解析器风格改成ResolverStyle.SMART或者ResolverStyle.LENIENT也能绕过这个问题。但既然你明确指定了STRICT模式,用uuuu替换yyyy是最符合规范的解决方式,能保证严格解析的正确性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:02