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

时间:2012-08-30 16:15:39

标签: java date format

所有

我知道我曾经问过一个关于使用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“”。

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

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

我找到的最佳答案就是这个问题。

Converting ISO 8601-compliant String to java.util.Date

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