У меня возникли проблемы преобразующего java.util.Date
в java.time.LocalDateTime
, и я имею очень странный эффект в отношении временной зоны:Преобразование java.util.Date в java.time.LocalDateTime с помощью ZoneId.systemDefault()
Date date = new Date(-3155677200000L); // 1870-01-01T00:00:00.000+0100
LocalDateTime localDateTime = LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); // 1869-12-31T23:53:28
Время действительно выключено. 6 минут и 32 секунды, что раздражает, потому что он также меняет дату и даже год здесь.
Это связано с ZoneId.systemDefault()
, если я использую ZoneOffset
, он работает.
Почему? Это ошибка в JDK? В только кажется, произошло за даты до 1893.
ZoneId.systemDefault()
Европа/Берлин (CET, +01: 00)
Аналогично:
ZonedDateTime zonedDateTime = LocalDateTime.of(1870, 1, 1, 0, 0, 0, 0).atZone(ZoneId.systemDefault());
принты:
1870-01-01T00:00+00:53:28[Europe/Berlin]
ожидаемый результат:
1870-01-01T00:00+01:00:00[Europe/Berlin]
Так что фактическое представление java.util.Date не так, как должно быть 1869-12-31T23: 53: 28.000 + 0100? – sco0ter
@ user2907078: Я не знаю, что вы подразумеваете под «представлением java.util.Date не так» - значение «Date» - это только момент времени, который составляет 1869-12-31T23: 00: 00Z, или эквивалентно 1870-01-01T00: 00: 00.000 + 0100. Это значение для значения миллисекунд-с-эпохи -3155677200000L. Если вы спрашиваете, неправильно ли 3155677200000L, мы не знаем - мы не знаем, откуда вы его взяли. –