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
相关产品推荐
相关产品推荐

