Недавно мы перевели наше приложение с Java 11 на Java 17. После развертывания мы заметили, что в некоторых записях наблюдается несоответствие, когда даты отображаются с разницей в один день (+1). Это происходит особенно в записях с годами до 1940 года. Наше приложение работает в часовом поясе CEST, а даты хранятся в MongoDB как UTC. В следующих примерах показаны случаи, когда мы выявили проблему.
БД Ява 11 Ява 17 1934-07-21T22:40:28.000+00:00 22 июля 1934 21 июля 1934 1897-08-06T23:40:28.000+00:00 07.08.1897 06.08.1897
Приведенный фрагмент кода, написанный на Kotlin, дает удовлетворительные результаты в Java 11. Однако при выполнении в Java 17 тот же код не работает должным образом.
fun main() { // Код Kotlin дата вал = Дата(-1118625572000) //1934-07-21T22:40:28.000+00:00 println("Дата: ${date.toInstant()?.atZone(ZoneId.systemDefault())!!.toLocalDate()}") } Вывод Java11:

Вывод Java17:

Есть ли в Java 17 решение для решения проблем, связанных с этими типами дат?
Мы попытались исправить эти записи непосредственно в базе данных, чтобы обеспечить наличие действительных дат.
Например,
1934-07-21T22:40:28.000+00:00 --> 1934-07-22T00:00:00.000+00:00 1897-08-06T23:40:28.000+00:00 --> 1897-08-07T00:00:00.000+00:00 Однако нам нужно выяснить, есть ли способ обрабатывать эти типы дат специально в Java 17.