я следующий кусок кода:Java 8 дата/время: мгновенный, не может быть разобрано на индекс 19
String dateInString = "2016-09-18T12:17:21:000Z";
Instant instant = Instant.parse(dateInString);
ZonedDateTime zonedDateTime = instant.atZone(ZoneId.of("Europe/Kiev"));
System.out.println(zonedDateTime);
Это дает мне следующее исключение:
Исключение в потоке «основной» java.time.format.DateTimeParseException: Текст '2016-09-18T12: 17: 21: 000Z' не может быть проанализирован по индексу 19 в java.time.format.DateTimeFormatter.parseResolved0 (DateTimeFormatter.java:1949) at java.time.format.DateTimeFormatter.parse (DateTimeForm atter.java:1851) на java.time.Instant.parse (Instant.java:395) при core.domain.converters.TestDateTime.main (TestDateTime.java:10)
Когда я изменить это последнее двоеточие до полной остановки:
String dateInString = "2016-09-18T12:17:21.000Z";
... то выполнение идет отлично:
2016-09-18T15: 17: 21 + 03: 00 [Европа/Киев]
Итак, вопрос в том, как разобрать дату с Instant
и DateTimeFormatter
?
Фактически стандартом является COMMA * или * FULL STOP (период), причем ** запятая является предпочтительной **. См. * ISO 8601: 2004 * Третье издание 2004-12-01, раздел «4.2.2.4 Представления с десятичной дробью»: ... десятичная дробь делится с целой части на десятичный знак, указанный в ISO 31-0, т.е. запятая [,] или полная остановка [.]. Из них запятая является предпочтительным знаком.... –
@basil Возможно, для ISO, но не в JDK, [который использует десятичную точку] (http://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatterBuilder.html# appendFraction-java.time.temporal.TemporalField-INT-INT-boolean-) – Bohemian