Rozwiązaniem jest budowa formatowania samemu korzystając DateTimeFormatterBuilder
i stałej szerokości dla każdego pola. Ten kod daje prawidłowy wynik.
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));
}
Wygląda na to, że wystąpił problem z formaterem podczas budowania go ze wzoru. Po przeszukiwaniu JIRA OpenJDK wygląda na to, że jest to błąd, o którym mowa w JDK-8031085 i który ma być naprawiony w JDK 9.
Dzięki za pomoc, wezmę ten kod do JDK9 –
Wow - nigdy bym nie Oczekiwano, że problemem będzie konstruowanie formatyzatora na początek. Fajny połów :) Usunie moją odpowiedź ... –