Search code examples
javamongodbdatesimpledateformatisodate

parse String to 'yyyy-mm-ddThh:mm:ss.SSSZ' ISODate java


How to convert String to ISODate format using SimpleDateFormat, which means that i want to finally get Date in java.util.Date format.

My string will look like 2017-02-17T09:28:03.000Z, i want to convert it to date formt. I can do this in Joda date format, but since i am using mongoDB, it does not accept joda format.

   String startDateString1 =  "2017-02-17T04:23:17.452Z";      
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); 
    Date  startDate = df.parse(startDateString1);
    String newDateString = df.format(startDate);

above code is not working.


Solution

  • Your code is not working since Z is a reserved character used to interpret RFC-822 time zones :

    RFC 822 time zone: For formatting, the RFC 822 4-digit time zone format is used:

     RFC822TimeZone:
             Sign TwoDigitHours Minutes
     TwoDigitHours:
             Digit Digit
    

    Since Java 7, you can use X to interpret ISO-8601 time zones https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html . The following works :

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

    However, on my computer,

    System.out.println(newDateString);
    

    results in the following output :

    2017-02-17T05:23:17.452+01

    Alternatively, if you are sure to have only UTC dates, you could escape the Z letter with simple quotes :

    DateFormat df = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
    

    And here is the displayed result :

    2017-02-17T04:23:17.452Z