Search code examples
javadateiso8601

SimpleDateFormat issue when parsing a String in ISO 8601 format


Appreciate there are lots of similar posts on this but I couldn't find a specific one to help.

I'm trying to convert this string to a Date in Java

2017-05-16 06:24:36-0700

But it fails each time with this code

Date Login = new SimpleDateFormat("dd/MM/yy HH:mm:ss").parse("2017-05-16 06:24:36-0700");

Now I'm presuming its due to the timezone info at the end - I just can't figure out how to set the format. I tried this but no luck

SimpleDateFormat("dd/MM/yy HH:mm:ssZ")

Any ideas?


Solution

  • The date format passed to your SimpleDateFormat is "dd/MM/yy", while the date you are trying to parse is of the format "yyyy-MM-dd". Try this instead:

    Date login = new SimpleDateFormat("yyyy-MM-dd HH:mm:ssZ").parse("2017-05-16 06:24:36-0700");
    

    As a side note, depending on which version of Java you are using, I would recommend using the new java.time package (JDK 1.8+) or the back port of that package (JDK 1.6+) instead of the outdated (no pun intended) Date and/or Calendar classes.

    Instant login = Instant.from(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ssZ").parse("2017-05-16 06:24:36-0700"));