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