Convert iso8601 string date time format to date in

2020-06-28 00:50发布

问题:

All,

I know I have asked a similar question on parsing an ISO8601 date string into a Date using Java before, but this is a more specific problem using the SimpleDateFormat class.

I have read the article Wiki ISO8601 Date.

I have been supplied an XML file from a customer which has a date and time with the following format:

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

According to the Wiki article this is valid which is fair enough.

Given the following code to parse this string, a ParseException is thrown with the message "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);

The problem is with the colon in the timezone specifier. +02:00 in the timezone causes the exception to be thrown. +0200 works fine.

Question is, is it possible to parse this type of string with the SimpleDateFormat?

Thanks

Andez

回答1:

No, using SimpleDateFormat, parsing this date is not possible (at least not in jdk 6 or lower). We had to write our own adapter for this ourselves.

Note, since this format is a valid part of XML Schema, you can use the DatatypeConverter.parseDateTime() method to parse this date.



回答2:

The best answer I have found is on this question.

Converting ISO 8601-compliant String to 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.