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()。