在Java中将iso8601字符串日期时间格式转换为日期

Convert iso8601 string date time format to date in Java

本问题已经有最佳答案,请猛点这里访问。

所有,

我知道在使用Java之前将ISO8601日期字符串解析为Date时,我已经提出了类似的问题,但这是使用SimpleDateFormat类的更具体的问题。

我已经阅读了文章Wiki ISO8601 Date。

我从客户那里获得了一个XML文件,其日期和时间格式如下:

2012-08-24T12:15:00+02:00

根据维基文章,这是有效的,这是公平的。

给定以下代码来解析此字符串,将抛出ParseException,并显示消息"Unparseable date:"2012-08-24T12:15:00 + 02:00"。

1
2
3
4
5
String inputDate ="2012-08-24T12:15:00+02:00";
String format ="yyyy-MM-dd'T'HH:mm:ssz";

SimpleDateFormat sdf = new SimpleDateFormat(format);
Date d = sdf.parse(inputDate);

问题在于时区说明符中的冒号。 时区中的+02:00会导致抛出异常。 +0200工作正常。

问题是,是否可以使用SimpleDateFormat解析这种类型的字符串?

谢谢

Andez


不,使用SimpleDateFormat,无法解析此日期(至少不在jdk 6或更低版本中)。 我们必须自己编写自己的适配器。

注意,由于此格式是XML Schema的有效部分,因此可以使用DatatypeConverter.parseDateTime()方法来解析此日期。


我发现的最佳答案就是这个问题。

将符合ISO 8601的字符串转换为java.util.Date

引用:
更简单的解决方案是在JAXB中使用数据类型转换器,因为JAXB必须能够根据XML Schema规范解析ISO8601日期字符串。 如果需要Date对象,javax.xml.bind.DatatypeConverter.parseDateTime("2010-01-01T12:00:00Z")将为您提供一个Calendar对象,您可以在其上使用getTime()。