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

Java OffsetDateTime解析失败求助:指定格式字符串无法解析

OffsetDateTime解析报NullPointerException的解决方法

尝试解析标准ISO格式的时间字符串"2021-12-31T23:00:00.000+00:00"为OffsetDateTime时,代码在同事机器正常运行,但Windows系统下的Java 11.0.17/19环境抛出如下异常:

java.time.format.DateTimeParseException: Text '2021-12-31T23:00:00.000+00:00' could not be parsed: Cannot invoke "java.time.temporal.TemporalAccessor.isSupported(java.time.temporal.TemporalField)" because "target" is null

即使自定义DateTimeFormatter,也会触发相同错误。


解决方案

  • 显式指定标准Locale
    解析时强制使用Locale.ROOT或Locale.US等标准区域设置,避免默认Locale的兼容性问题:

    // 使用默认ISO格式解析器并指定Locale
    OffsetDateTime test = OffsetDateTime.parse(
        "2021-12-31T23:00:00.000+00:00",
        DateTimeFormatter.ISO_OFFSET_DATE_TIME.withLocale(Locale.ROOT)
    );
    

    自定义格式化器时同样需要指定Locale:

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ")
        .withLocale(Locale.ROOT);
    OffsetDateTime test = OffsetDateTime.parse("2021-12-31T23:00:00.000+00:00", formatter);
    
  • 修改JVM默认Locale
    在应用启动参数中添加:

    -Duser.language=en -Duser.country=US
    

    或者在代码初始化阶段设置默认Locale:

    Locale.setDefault(Locale.ROOT);
    
  • 重新安装JDK
    如果上述方法无效,可能是本地JDK文件损坏,重新下载并安装对应版本的官方JDK,确保文件完整性。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 20:00:58