Обратите внимание, что старый класс Date
представляет момент времени , а не локальную дату. Просто так получается, что Date.toString
выводит строку, как если бы она находилась в системном часовом поясе.
API java.time заставляет вас задуматься о том, что вы хотите. Он предоставляет вам разные типы для представления разных временных концепций. LocalDate.parse
будет интерпретировать только часть строки "local date".
Ваша строка даты представляет OffsetDateTime
, поэтому вам следует использовать OffsetDateTime.parse
. Теперь у вас есть LocalDateTime
плюс ZoneOffset
. Чтобы сделать его 09-01, вы должны изменить его зону, сохраняя при этом тот же момент, что можно сделать с помощью atZoneSameInstant
, а затем получить часть локальной даты:
System.out.println("LocalDate: " +
OffsetDateTime.parse(date, DateTimeFormatter.ofPattern(format))
.atZoneSameInstant(ZoneOffset.systemDefault())
.toLocalDate());