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

如何解析格式为2020-02-11T17:26:31-05:00的日期时间?

解决带时区偏移的日期解析问题

首先得明确:你拿到的日期字符串2020-02-11T17:26:31-05:00是标准ISO 8601带UTC偏移量的日期时间格式,末尾的-05:00代表比UTC时间晚5小时的时区偏移,不是毫秒或其他特殊格式。

你的代码有两个核心问题导致解析失败:

  • 自定义的格式模式完全不匹配目标日期结构
  • 误用了不支持时区/偏移量的LocalDateTime类

正确的解析方案

方案1:用内置ISO格式(推荐,无需手动写模式)

Java 8+的DateTimeFormatter已经内置了对应这种格式的解析器,直接调用就行,同时要用OffsetDateTime接收结果(它专门处理带偏移量的日期时间):

String otmmResponseDate = "2020-02-11T17:26:31-05:00";
// 更简洁的写法:OffsetDateTime本身就支持解析这种标准格式,无需显式指定Formatter
OffsetDateTime responseDateTime = OffsetDateTime.parse(otmmResponseDate);

// 也可以显式指定内置Formatter,效果一致
// OffsetDateTime responseDateTime = OffsetDateTime.parse(otmmResponseDate, DateTimeFormatter.ISO_OFFSET_DATE_TIME);

方案2:手动指定正确的格式模式

如果你一定要自定义模式,注意这几点:

  • 去掉多余的SSS(你的日期里没有毫秒部分)
  • 删掉末尾的'Z'(你的日期结尾是偏移量-05:00,没有Z字符)
  • 依然要用OffsetDateTime而非LocalDateTime

代码示例:

String otmmResponseDate = "2020-02-11T17:26:31-05:00";
DateTimeFormatter responseFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX", Locale.ENGLISH);
OffsetDateTime responseDateTime = OffsetDateTime.parse(otmmResponseDate, responseFormatter);

原代码报错的原因

  1. 模式里的SSS对应毫秒,但你的日期字符串没有毫秒段,解析时会找不到对应内容抛出异常
  2. 模式末尾的'Z'强制要求字符串以Z结尾,可你的日期是-05:00结尾,格式不匹配
  3. LocalDateTime是不带时区/偏移信息的类型,根本无法解析包含偏移量的日期字符串,必须用支持偏移的OffsetDateTime或ZonedDateTime

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 17:34:07