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);

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

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

2 ответов


ошибка 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"));
}

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

вы можете обойти проблему с помощью java.текст.Класса simpledateformat:

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

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