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

如何解析2020-12-31T11:46:18.000+00:00格式日期?遇Unparseable date异常

解决SimpleDateFormat解析2020-12-31T11:46:18.000+00:00的异常问题

你的日期字符串结尾是+00:00(UTC时区偏移量),但之前的格式字符串用了'Z'或Z,和实际的偏移格式不匹配,导致解析失败。以下是两种可行的解决方法:

方法一:使用正确的SimpleDateFormat格式

需要用匹配时区偏移量的格式符,比如X或ZZZZZ,具体代码如下:

格式符X(支持多种偏移格式)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");
Date startDate = sdf.parse("2020-12-31T11:46:18.000+00:00");

格式符ZZZZZ(匹配完整偏移格式+00:00)

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZZZZZ");
Date startDate = sdf.parse("2020-12-31T11:46:18.000+00:00");

方法二:推荐使用Java 8+的新日期API(更安全可靠)

SimpleDateFormat存在线程不安全问题,Java 8及以上推荐使用DateTimeFormatter和OffsetDateTime:

使用ISO标准格式直接解析

DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2020-12-31T11:46:18.000+00:00");
// 如需转换为Date类型
Date startDate = Date.from(offsetDateTime.toInstant());

自定义格式解析

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX");
OffsetDateTime offsetDateTime = OffsetDateTime.parse("2020-12-31T11:46:18.000+00:00", formatter);
// 转换为Date
Date startDate = Date.from(offsetDateTime.toInstant());

格式符说明

  • X/XXX:匹配ISO 8601标准的时区偏移,支持+00、+0000、+00:00多种格式
  • ZZZZZ:精确匹配+00:00这种带冒号的完整偏移格式

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

相关产品推荐
方舟 Agent Plan

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

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