问题
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.
来源:https://stackoverflow.com/questions/12201233/convert-iso8601-string-date-time-format-to-date-in-java