Search code examples
javamillisecondslocaldatetimedatetimeformatter

LocalDateTime.parse(yyyMMddHHmmssSSS, DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS") error


Why doesn't it work? ... 1) is works, but 2) occurs DateTimeParseException.

# 1

DateTimeFormatter formatter1 = DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS");
LocalDateTime dt1 = LocalDateTime.parse("20211211134321.221", formatter1);

# 2

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime dt = LocalDateTime.parse("20211211134321221", formatter);

Solution

  • Bug, fixed in Java 9+

    Per the comments, it seems that such code runs successfully in some earlier versions of Java 8 but fails in other later versions of Java 8.

    Apparently due to a bug, JDK-8031085, fixed in Java 9+.


    Here is my reformatted version of your code.

    DateTimeFormatter fx = DateTimeFormatter.ofPattern( "yyyyMMddHHmmss.SSS" ); 
    LocalDateTime x = LocalDateTime.parse( "20211211134321.221" , fx );
    System.out.println( "x = " + x ) ;
    
    DateTimeFormatter fy = DateTimeFormatter.ofPattern( "yyyyMMddHHmmssSSS" ); 
    LocalDateTime y = LocalDateTime.parse( "20211211134321221" , fy );
    System.out.println( "y = " + y ) ;
    

    When run in Java 12, as seen on IdeOne.com.

    x = 2021-12-11T13:43:21.221
    y = 2021-12-11T13:43:21.221