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

ZonedDateTime解析失败:是否使用了错误的日期格式?

解析带纳秒的UTC时间戳到ZonedDateTime报错

我尝试将时间戳"26-JUL-23 10.01.51.336231000 AM UTC"解析为ZonedDateTime对象,代码如下:

ZonedDateTime.parse("26-JUL-23 10.01.51.336231000 AM UTC", formatter)

但持续抛出错误:

java.time.format.DateTimeParseException: Text '26-JUL-23 10.01.51.336231000 AM UTC' could not be parsed...

我尝试使用如下DateTimeFormatter,但问题未解决:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.SSSSSS a z")

请问是不是日期格式用错了?


问题原因与解决办法

你的格式字符串存在两个关键问题:

  1. 纳秒格式符不匹配:时间戳里的336231000是9位纳秒,而你使用的SSSSSS仅能匹配6位微秒,需要改为SSSSSSSSS来适配9位纳秒。
  2. 时区标识解析问题:z格式符对UTC这类时区ID的兼容性较差,建议改用V(标准时区ID格式符);同时必须指定英文Locale,否则默认Locale非英文时无法识别JUL这类英文月份缩写。

修正后的代码如下:

// 指定英文Locale确保月份解析正确,同时匹配9位纳秒和UTC时区
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd-MMM-yy hh.mm.ss.SSSSSSSSS a V", Locale.ENGLISH);
ZonedDateTime zdt = ZonedDateTime.parse("26-JUL-23 10.01.51.336231000 AM UTC", formatter);

补充说明:

  • hh是12小时制格式符,配合a(上午/下午标识)的用法是正确的,无需修改。
  • 如果你的运行环境默认Locale已经是英文,Locale参数可以省略,但显式指定能避免跨环境问题。

内容的提问来源于stack exchange,提问作者Catherine S.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 22:49:54