javajava-8date

Parse ZonedDateTime from String containing milliseconds


I need to get ZonedDateTime from the String of the following format:

"26.06.2019T00:00:00.123+03:00"

This format seems to be a standard one, so I used the following code to parse ZonedDateTime from the string:

ZonedDateTime.parse("26.06.2019T00:00:00.123+03:00");

However, I get an exception:

Exception in thread "main" java.time.format.DateTimeParseException: Text '26.06.2019T00:00:00.123+03:00' could not be parsed at index 0

Solution

  • The format you are using is not a standard format since you are using dd.mm.yyyy for the date instead of yyyy-mm-dd. Therefore it does not work with the default formatter used by parse().

    You can easily set up a custom DateTimeFormatter for your special case:

    String pattern = "dd.MM.yyyy'T'HH:mm:ss.SSSXXX";
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
    
    String input = "26.06.2019T00:00:00.123+03:00";
    ZonedDateTime zonedDateTime = ZonedDateTime.parse(input, dtf);
    

    The output of System.out.println(zonedDateTime) is then the correct ISO-format:

    2019-06-26T00:00:00.123+03:00
    

    As per Jesper's comment, I would advise you to use the actual standard format and to try to convince whoever is supplying you those string to use the actual ISO format as well.