Search code examples
javadatetimedatetime-formatjava-timedatetime-parsing

Java 8 DateTimeFormatter to ignore millisecond and zone


I am struggling with Java 8 DateTimeFormatter.

I would like to convert a given String to dateFormat and parse to LocalDateTime

Here is my code

DateTimeFormatter f = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss")
String text = "2020-01-01T01:01:11.123Z"
LocalDateTime date = LocalDateTime.parse(text, f)

But Java throws

Text could not be parsed, unparsed text found at index 19

If I change ofPattern to yyyy-MM-dd'T'HH:mm:ss.SSSX, my code executes without any error. But I don’t want to use millisecond and time zone.


Solution

  • Do this instead:

    String text = "2020-01-01T01:01:11.123Z";
    LocalDateTime date = ZonedDateTime.parse(text)
                                      .toLocalDateTime();
    

    To get rid of the milliseconds information, do:

    LocalDateTime date = ZonedDateTime.parse(text)
                                      .truncatedTo(ChronoUnit.SECONDS)
                                      .toLocalDateTime();
    

    You can also use OffsetDateTime in place of ZonedDateTime.