Unparseable date using DateFormat.parse()

justacoder picture justacoder · Mar 19, 2013 · Viewed 16.6k times · Source

I followed a few other solutions on this site to this dilemma, and I do not have Joda Time installed, but I'm still at a loss as to why this is failing.

I also tried removing the colons, as one solution stated, but that did not help.

currentNode.getProperty("jcr:created").getString() = 2013-03-07T11:57:08.596-05:00

I get this error: java.text.ParseException: Unparseable date: "2013-03-07T11:57:08.596-05:00"

<%@page import="
    java.util.Date,
    java.text.SimpleDateFormat,
    java.text.DateFormat"
%>
<%
    DateFormat outputFormat = new SimpleDateFormat("MMMM dd, yyyy");
    DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");
    String currentDate = currentNode.getProperty("jcr:created").getString();
    Date date = inputFormat.parse(currentDate); // <-- Failing here
    String currentDateString = outputFormat.format(date);
%>

Answer

drunken bot picture drunken bot · Mar 19, 2013

The time zone formated as Z should be -0500, not -05:00.

So I'd suggest you to replace

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ");

with

DateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSX");

See SimpleDateFormat's javadoc for more details on available formats.

If your jdk doesn't allow the X pattern, you'll have to fix the input string to remove the :. This can be done with a regex :

currentDate = currentDate.replaceAll(":(\\d\\d)$", "$1")