Odpowiedzi:
Możesz to zrobić:
timeStamp.toLocalDateTime().toLocalDate();
Pamiętaj, że do konwersji
timestamp.toLocalDateTime()
zostanie użytaClock.systemDefaultZone()
strefa czasowa. To może być to, czego chcesz, ale nie musi.
timestamp.toLocalDateTime()
metoda użyje strefy czasowej systemDefault do wykonania konwersji. To może być to, czego chcesz, ale nie musi.
LocalDateTime
zawsze używa domyślnej strefy czasowej systemu. To właśnie oznacza „Lokalny” w jego nazwie.
Przyjęta odpowiedź nie jest idealna, więc zdecydowałem się dodać moje 2 centy
timeStamp.toLocalDateTime().toLocalDate();
jest ogólnie złym rozwiązaniem , nie jestem nawet pewien, dlaczego dodali tę metodę do JDK, ponieważ robi to naprawdę zagmatwane, wykonując niejawną konwersję przy użyciu strefy czasowej systemu. Zwykle, gdy używa się tylko klas daty java8, programista jest zmuszony do określenia strefy czasowej, co jest dobrą rzeczą.
Dobre rozwiązanie to
timestamp.toInstant().atZone(zoneId).toLocalDate()
Gdzie zoneId to strefa czasowa, której chcesz użyć, zazwyczaj jest to ZoneId.systemDefault (), jeśli chcesz użyć strefy czasowej systemu lub strefy czasowej zakodowanej na stałe, takiej jak ZoneOffset.UTC
Ogólne podejście powinno być
Lekko rozszerzę odpowiedź @assylias, aby uwzględnić strefę czasową. Istnieją co najmniej dwa sposoby uzyskania LocalDateTime dla określonej strefy czasowej.
Możesz użyć strefy czasowej setDefault dla całej aplikacji. Powinien zostać wywołany przed jakąkolwiek konwersją znacznika czasu -> java.time:
public static void main(String... args) {
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
...
timestamp.toLocalDateTime().toLocalDate();
}
Lub możesz użyć łańcucha toInstant.atZone:
timestamp.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDate();