Comment convertir java.sql.horodatage LocalDate (java8) de java.de temps?
Dans Java 8, comment puis-je convertir un Timestamp (en java.sql) à un LocalDate (en java.time)?
J'ai eu un peu le même problème ici: stackoverflow.com/a/23197731/1856960. Réponse courte, pas vraiment. Mais ce n'est pas nécessairement une mauvaise chose.
Juste une remarque, le timestamp.toLocalDateTime() méthode utilise la systemDefault fuseau horaire pour faire la conversion. Cela peut ou peut ne pas être ce que vous voulez.
s'il vous plaît poster de réponse explicite à l'aide de fuseau horaire. Merci!
commentaire est extrêmement important, ici, d'où le nombre de upvotes pour elle. Voir ma réponse pour plus de détails stackoverflow.com/a/57101544/2032701
Je vais légèrement augmenter @assylias répondre pour prendre le temps de la zone en compte. Il y a au moins deux façons d'obtenir LocalDateTime de fuseau horaire spécifique.
Vous pouvez utiliser setDefault fuseau horaire pour l'ensemble de l'application. Il doit être appelée avant toute timestamp -> java.le temps de conversion:
Accepté la réponse n'est pas idéal, j'ai donc décidé d'ajouter mes 2 cents
timeStamp.toLocalDateTime().toLocalDate();
est une mauvaise solution en général, je ne suis même pas sûr de savoir pourquoi ils ont ajouté cette méthode pour le JDK, car il rend les choses vraiment à confusion en faisant une conversion implicite en utilisant le système de fuseau horaire. Habituellement lors de l'utilisation de seulement java8 date de classes, le programmeur est obligé de spécifier un fuseau horaire qui est une bonne chose.
Où zoneId est le fuseau horaire que vous souhaitez utiliser qui est généralement soit ZoneId.systemDefault() si vous souhaitez utiliser votre système de fuseau horaire ou certains codé en dur fuseau horaire comme ZoneId.d'("UTC")
L'approche générale devrait être
Se libérer de la nouvelle java8 date de classes à l'aide d'une classe, qui est directement liée, par exemple, dans notre cas java.temps.Instantanée est directement lié à java.sql.Timestamp, c'est à dire pas de fuseau besoin de faire des conversions entre eux.
Utiliser le bien-conçu méthodes dans ce java8 classe de faire la bonne chose. Dans notre cas atZone(zoneId) fait explicite que nous faisons de la conversion et de l'utilisation d'un fuseau horaire pour elle.
Que vous pouvez faire:
timestamp.toLocalDateTime()
méthode utilise la systemDefault fuseau horaire pour faire la conversion. Cela peut ou peut ne pas être ce que vous voulez.Je vais légèrement augmenter @assylias répondre pour prendre le temps de la zone en compte. Il y a au moins deux façons d'obtenir LocalDateTime de fuseau horaire spécifique.
Vous pouvez utiliser setDefault fuseau horaire pour l'ensemble de l'application. Il doit être appelée avant toute timestamp -> java.le temps de conversion:
Ou vous pouvez utiliser toInstant.atZone de la chaîne:
Accepté la réponse n'est pas idéal, j'ai donc décidé d'ajouter mes 2 cents
est une mauvaise solution en général, je ne suis même pas sûr de savoir pourquoi ils ont ajouté cette méthode pour le JDK, car il rend les choses vraiment à confusion en faisant une conversion implicite en utilisant le système de fuseau horaire. Habituellement lors de l'utilisation de seulement java8 date de classes, le programmeur est obligé de spécifier un fuseau horaire qui est une bonne chose.
La bonne solution est
Où zoneId est le fuseau horaire que vous souhaitez utiliser qui est généralement soit ZoneId.systemDefault() si vous souhaitez utiliser votre système de fuseau horaire ou certains codé en dur fuseau horaire comme ZoneId.d'("UTC")
L'approche générale devrait être