Ответ 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.