Некоторое время я искал Google, и наиболее часто используемый метод выглядит
date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
Однако, этот метод, кажется, терпит неудачу для дат до 1893-04-01
Следующий тест завершился неудачно на моей машине с результатом 1893-03-31 вместо 1893-04-01:
@Test
public void testBeforeApril1893() throws ParseException {
Date date = new SimpleDateFormat("yyyy-MM-dd").parse("1893-04-01");
System.out.println(date);
LocalDate localDate2 = date.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
System.out.println(localDate2);
assertEquals(1893, localDate2.getYear());
assertEquals(4, localDate2.getMonth().getValue());
assertEquals(1, localDate2.getDayOfMonth());
}
System.out.prinln
Мне нужно дважды проверить созданные даты. Я вижу следующий вывод:
Sun Apr 02 00:00:00 CET 1893
1893-04-02
Sat Apr 01 00:00:00 CET 1893
1893-03-31
Для 1400-04-01 я даже получаю вывод 1400-04-09.
Есть ли способ правильно преобразовать даты до 1893-04 в LocalDate
?
Как было сказано некоторым образом, причина этого сдвига объясняется в этом вопросе. Однако я не вижу, как я могу вывести правильное преобразование, основанное на этих знаниях.