Следующий тест не выполнен: '86
День рождения формируется как 2068
. Как я могу форматировать как 1986
?Как заставить java.time.LocalDate принять 19-ое столетие как образец года YY?
@Test
public void testBirthday() {
assertEquals("1986-08-07", java.time.LocalDate.parse("070886",
java.time.format.DateTimeFormatter.ofPattern("ddMMyy")));
}
завершается с:
java.lang.AssertionError: expected:<1986-08-07> but was:<2086-08-07>
Это сильно отличается от org.joda.time
библиотеки, которая будет правильно считать 19'
здесь.
/Sidenote: относительно отмеченных ответов в «повторяющихся» вопросах, я не думаю, что это дубликат!
шуточного Ответ заключается в использовании 'org.joda.time'. – Bathsheba
Нет, это не так. 'joda' фактически« устарел »и больше не развивается. По крайней мере, сами авторы предлагают перейти на java8 'java.time' в настоящее время. – membersound
Просто отметим, что это документированное поведение: «Если количество букв равно двум, то используется уменьшенная двузначная форма. Для печати это выводит самые правые две цифры. Для синтаксического анализа это будет анализироваться с использованием базового значения 2000, в результате чего в течение года в пределах от 2000 до 2099 включительно ». К сожалению, он не говорит, как * изменить * это поведение. Возможно, вы сможете указать отдельный ResolverField, но он немного надуман. Вам может показаться проще просто «исправить» строку вручную, чтобы использовать четырехзначный год. –