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