Синтаксический анализатор, созданный DateTimeFormatter.ofPattern
, демонстрирует следующее интересное поведение, которое не позволяет мне написать шаблон для анализа строки, подобной 20150100
:
System.out.println(DateTimeFormatter.ofPattern("yyyyMM").parse("201501", YearMonth::from)); // works
System.out.println(DateTimeFormatter.ofPattern("yyyyMM'aa'").parse("201501aa", YearMonth::from)); // works
System.out.println(DateTimeFormatter.ofPattern("yyyyMM'00'").parse("20150100", YearMonth::from));
// java.time.format.DateTimeParseException: Text '20150100' could not be parsed at index 0
Я отладил код, кажется, проблема вызвана разбором поля года за концом строки (максимальная ширина для трех y и более всегда равна 19). Однако я не понимаю, как это может работать для шаблона без литерала '00'
в конце.
Есть ли способ исправить это с помощью построителя форматирования?
Редактировать:
Поскольку Джаррод ниже подтвердил, что это ошибка, я погуглил и наконец нашел отчеты об ошибках:
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8031085
http://bugs.java.com/bugdatabase/view_bug.do?bug_id=8032491
Оба исправлены только в Java 9, хотя ......
SimpleDateFormat
, и поведение похоже на ошибку ... - person billc.cn   schedule 25.08.2016SimpleDateFormat
тоже не работает, потому что они оба полагаются наDateTimeFormatter
, и именно в этом заключается ошибка. - person   schedule 25.08.2016SimpleDateFormat
не выходит из строя так же. Это независимая реализация, которая НЕ полагается наDateTimeFormatter
. Просто изучите старый исходный кодSimpleDateFormat
. Обе реализации терпят неудачу по разным внутренним причинам. Я бы не стал квалифицировать это как ошибку. Это просто отсутствующая функция в обеих библиотеках. - person Meno Hochschild   schedule 28.08.2016