Java.time: DateTimeParseException для даты "20150901023302166"

LocalDateTime.parse("20150901023302166", DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS"))

дает ошибку:

java.time.format.DateTimeParseException: текст '20150901023302166' не может быть проанализирован с индексом 0

Ответ 1

Обходной путь заключается в том, чтобы самостоятельно построить форматтер, используя DateTimeFormatterBuilder и фиксированную ширину для каждого поля. Этот код дает правильный результат.

public static void main(String[] args) {
    DateTimeFormatter formatter = new DateTimeFormatterBuilder()
                                        .appendValue(ChronoField.YEAR, 4)
                                        .appendValue(ChronoField.MONTH_OF_YEAR, 2)
                                        .appendValue(ChronoField.DAY_OF_MONTH, 2)
                                        .appendValue(ChronoField.HOUR_OF_DAY, 2)
                                        .appendValue(ChronoField.MINUTE_OF_HOUR, 2)
                                        .appendValue(ChronoField.SECOND_OF_MINUTE, 2)
                                        .appendValue(ChronoField.MILLI_OF_SECOND, 3)
                                        .toFormatter();

    System.out.println(LocalDateTime.parse("20150901023302166", formatter));
}

Таким образом, похоже, что существует проблема с форматированием при построении его из шаблона. После поиска OpenJDK JIRA кажется, что это действительно ошибка, как указано в JDK-8031085 и планируется установить в JDK 9.