Код: Выделить всё
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy", java.util.Locale.GERMAN);
String dateInString = "06-04-1980";
Date date = formatter.parse(dateInString);
после: воскресенье, 6 апреля, 01:00:00 по центральноевропейскому летнему времени 1980 года
Другой пример:
Код: Выделить всё
Date date = Date.from(LocalDate.of(1980, 4, 6).atStartOfDay(ZoneId.systemDefault()).toInstant());
Мы думали, что проблема заключается в смене java11 на java17, но это не так. Это была смена часового пояса с Европы/Берлина на Европу Вена. 6 апреля 1980 г. в Австрии было установлено летнее время, и переход часов произошел в 00:00. Таким образом, в этот день не было 00:00.
Воспроизводимый пример: изменение часового пояса на «Европа/Берлин» приводит к 0 часам.
Код: Выделить всё
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy");
for (LocalDate date = LocalDate.of(1500, 04, 01); date.isBefore(LocalDate.of(9999, 1, 1)); date = date.plusDays(1)) {
Date out = Date.from(date.atStartOfDay(ZoneId.of("Europe/Vienna")).toInstant());
Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone(ZoneId.of("Europe/Vienna")));
cal.setTime(out);
if (cal.get(Calendar.HOUR_OF_DAY) > 0) {
System.out.println(date.format(formatter) + " > " + cal.get(Calendar.HOUR_OF_DAY));
}
}
System.out.println("done");
Подробнее здесь: https://stackoverflow.com/questions/733 ... wrong-hour
Мобильная версия