2

全部,

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

我已阅读文章Wiki ISO8601 Date

我从客户那里获得了一个 XML 文件,该文件的日期和时间采用以下格式:

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

根据 Wiki 文章,这是有效的,这很公平。

给定以下代码来解析此字符串,会引发 ParseException,并显示消息“无法解析的日期:“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 解析这种类型的字符串?

谢谢

安德斯

4

2 回答 2

4

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

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

于 2012-08-30T16:22:29.793 回答
1

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

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

Quote: The easier solution is possibly to use the data type converter in JAXB, since JAXB must be able to parse ISO8601 date string according to the XML Schema specification. javax.xml.bind.DatatypeConverter.parseDateTime("2010-01-01T12:00:00Z") will give you a Calendar object and you can simply use getTime() on it, if you need a Date object.

于 2013-08-19T01:14:08.917 回答