2

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

Andez
  • 5,588
  • 20
  • 75
  • 116
  • 6
    you may find this useful: http://www.java2s.com/Code/Java/Data-Type/ISO8601dateparsingutility.htm . It's worth to check http://stackoverflow.com/questions/2201925/converting-iso8601-compliant-string-to-java-util-date as well – Lorand Bendig Aug 30 '12 at 16:29

2 Answers2

4

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.

jtahlborn
  • 52,909
  • 5
  • 76
  • 118
1

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.

Community
  • 1
  • 1
James Gardiner
  • 382
  • 2
  • 8