Java 8: DateTimeParseException

В основном, я пытаюсь разобрать строку на метку времени.

public static void main(String[] args) {
    System.out.println("Timestamp:" + DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").parse("20180301050630663"));
}

У меня есть исключение, говорящее, что

Exception in thread "main" java.time.format.DateTimeParseException: Text '20180301050630663' could not be parsed at index 0
    at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1947)
    at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1849)
    at java.time.LocalDateTime.parse(LocalDateTime.java:492)
    at Lob.main(Lob.java:41)

Затем я попытался сделать это:

DateTimeFormatter fmt = DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS");
LocalDateTime timestamp = LocalDateTime.parse("20180301050630663", fmt);
System.out.println("Timestamp:" + timestamp);

И получил ту же ошибку исключения.

Что я тут сделал? В идеале я хочу сохранить временную метку переменной и сравнить ее с другой меткой времени, которую я читаю. Как я могу это достичь?

Ответ 1

Ошибка JDK8 и была решена в JDK9:

https://bugs.java.com/view_bug.do?bug_id=JDK-8031085

Обновить

Как сказал пользователь @Aaron в комментарии, вы можете использовать обходной путь, который включен в отладчик ошибок IMO:

public static void main(String[] args) {
    DateTimeFormatter dtf = new DateTimeFormatterBuilder().appendPattern("yyyyMMddHHmmss").appendValue(ChronoField.MILLI_OF_SECOND, 3).toFormatter();
    System.out.println("Timestamp:" + dtf.parse("20180301050630663"));
}

Ответ 2

Похоже, это ошибка. Этот код работает на Java 10 (и, кажется, 9).

Вы можете обойти проблему, используя java.text.SimpleDateFormat:

new java.text.SimpleDateFormat('yyyyMMddHHmmssSSS').
                 parse("20180301050630663")

Что работает просто отлично (Thu Mar 01 05:06:30 SAST 2018 - это выход в моей TZ):