Відповіді:
Ви можете зробити:
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 для всього додатка. Її слід викликати перед будь-якою часовою позначкою -> 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();