Dans Java 8, comment puis-je convertir une Timestamp
(dans Java.sql
) en un LocalDate
(dans Java.time
)?
Tu peux faire:
timeStamp.toLocalDateTime().toLocalDate();
J'élargirai légèrement la réponse de @assylias pour prendre en compte le fuseau horaire. Il existe au moins deux méthodes pour obtenir LocalDateTime pour un fuseau horaire spécifique.
Vous pouvez utiliser le fuseau horaire setDefault pour toute l'application. Il doit être appelé avant tout horodatage -> Conversion Java.time:
public static void main(String... args) {
TimeZone utcTimeZone = TimeZone.getTimeZone("UTC");
TimeZone.setDefault(utcTimeZone);
...
timestamp.toLocalDateTime().toLocalDate();
}
Ou vous pouvez utiliser la chaîne toInstant.atZone:
timestamp.toInstant()
.atZone(ZoneId.of("UTC"))
.toLocalDate();
La réponse acceptée n’est pas idéale, j’ai donc décidé d’ajouter mes 2 centimes
timeStamp.toLocalDateTime().toLocalDate();
c'est une mauvaise solution en général, je ne sais même pas pourquoi ils ont ajouté cette méthode au JDK car cela rend les choses vraiment déroutantes en effectuant une conversion implicite en utilisant le fuseau horaire du système. Habituellement, lorsqu'il utilise uniquement les classes de date Java8, le programmeur est obligé de spécifier un fuseau horaire, ce qui est une bonne chose.
La bonne solution est
timestamp.toInstant().atZone(zoneId).toLocalDate()
Où zoneId est le fuseau horaire que vous souhaitez utiliser, généralement ZoneId.systemDefault () si vous souhaitez utiliser votre fuseau horaire système ou un fuseau horaire codé en dur, comme ZoneOffset .UTC
L’approche générale devrait être