Ответы:
Ты можешь сделать:
timeStamp.toLocalDateTime().toLocalDate();
Обратите внимание, что для преобразования
timestamp.toLocalDateTime()
будет использоватьсяClock.systemDefaultZone()
часовой пояс. Это может быть то, что вы хотите, а может и не быть.
timestamp.toLocalDateTime()
метод будет использовать часовой пояс systemDefault для преобразования. Это может быть то, что вы хотите, а может и не быть.
LocalDateTime
всегда использует часовой пояс по умолчанию. Вот что означает «местный» в его названии.
Принятый ответ не идеален, поэтому я решил добавить свои 2 цента
timeStamp.toLocalDateTime().toLocalDate();
- плохое решение в целом , я даже не уверен, почему они добавили этот метод в JDK, поскольку он действительно сбивает с толку, выполняя неявное преобразование с использованием системного часового пояса. Обычно при использовании только классов даты java8 программист вынужден указывать часовой пояс, что хорошо.
Хорошее решение
timestamp.toInstant().atZone(zoneId).toLocalDate()
Где zoneId - это часовой пояс, который вы хотите использовать, обычно это либо ZoneId.systemDefault (), если вы хотите использовать системный часовой пояс, либо какой-либо жестко заданный часовой пояс, например ZoneOffset.UTC
Общий подход должен быть
Я немного расширю ответ @assylias, чтобы учесть часовой пояс. Есть как минимум два способа получить LocalDateTime для определенного часового пояса.
Вы можете использовать часовой пояс setDefault для всего приложения. Его следует вызывать перед любым преобразованием timestamp -> java.time:
public static void main(String... args) {
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
...
timestamp.toLocalDateTime().toLocalDate();
}
Или вы можете использовать цепочку toInstant.atZone:
timestamp.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDate();