Risposte:
Tu puoi fare:
timeStamp.toLocalDateTime().toLocalDate();
Nota che
timestamp.toLocalDateTime()
utilizzerà ilClock.systemDefaultZone()
fuso orario per effettuare la conversione. Questo può o non può essere quello che vuoi.
timestamp.toLocalDateTime()
metodo utilizzerà il fuso orario systemDefault per effettuare la conversione. Questo può o non può essere quello che vuoi.
LocalDateTime
utilizza sempre il fuso orario predefinito dal sistema. Questo è ciò che significa "Locale" nel suo nome.
La risposta accettata non è l'ideale, quindi ho deciso di aggiungere i miei 2 centesimi
timeStamp.toLocalDateTime().toLocalDate();
è una cattiva soluzione in generale , non sono nemmeno sicuro del motivo per cui hanno aggiunto questo metodo al JDK in quanto rende le cose davvero confuse facendo una conversione implicita utilizzando il fuso orario del sistema. Di solito quando si usano solo classi di data java8 il programmatore è costretto a specificare un fuso orario che è una buona cosa.
La buona soluzione è
timestamp.toInstant().atZone(zoneId).toLocalDate()
Dove zoneId è il fuso orario che si desidera utilizzare, che in genere è ZoneId.systemDefault () se si desidera utilizzare il fuso orario del sistema o un fuso orario codificato come ZoneOffset.UTC
L'approccio generale dovrebbe essere
Espanderò leggermente la risposta di @assylias per tenere conto del fuso orario. Esistono almeno due modi per ottenere LocalDateTime per un fuso orario specifico.
È possibile utilizzare il fuso orario setDefault per l'intera applicazione. Dovrebbe essere chiamato prima di qualsiasi timestamp -> java.time conversione:
public static void main(String... args) {
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
...
timestamp.toLocalDateTime().toLocalDate();
}
Oppure puoi usare la catena toInstant.atZone:
timestamp.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDate();