2012-08-30 104 views
2

所有,转换ISO8601字符串日期时间格式日期在Java中

我知道我已经问过类似的问题之前使用Java解析ISO8601日期字符串为日期,但是这是使用的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

+6

你可能会觉得这很有用:http://www.java2s.com/Code/Java/Data-Type/ISO8601dateparsingutility.htm。值得检查http://stackoverflow.com/questions/2201925/converting-iso8601-compliant-string-to-java-util-date以及 –

回答

4

没有,使用的SimpleDateFormat,解析该日期是不可能的(至少没有在JDK 6或更低)。我们必须自己编写我们自己的适配器。

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

+0

+1感谢您指出这门课。 – Andez

+0

+1比使用SimpleDateFormat更好 – Damo

+0

当我尝试解析“2015-10-19T18:58:23.000 + 0000” –

1

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

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

引用: 较容易的解决方案是可能的,以使用在JAXB的数据类型转换器中,由于JAXB必须能够根据XML模式规范来解析ISO8601日期字符串。如果您需要Date对象,javax.xml.bind.DatatypeConverter.parseDateTime(“2010-01-01T12:00:00Z”)将为您提供Calendar对象,并且您可以简单地使用它的getTime()。

相关问题