如何解析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
相关产品推荐
相关产品推荐

