所有
我知道我曾经问过一个关于使用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
答案 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()即可