Comment convertir LocalDate en SQL Date Java?

98

Comment convertir un LocalDate en un java.sql.Date?

Tentative:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(new Date(date));

Cela échoue (ne compile pas) et tout ce que je peux trouver, c'est du temps Joda.

J'utilise Java 8

Gemtastique
la source
duplication possible de Convert entre LocalDate et sql.Date
assylias
2
@assylias En quoi la réponse à la question liée est-elle meilleure que celles données ici? L'autre question devrait être fermée comme une copie de celle-ci, et non l'inverse.
Madara's Ghost
1
@SecondRikudo le doublon montre comment convertir de LocalDate en Date ET vice versa, et semble donc plus général.
assylias

Réponses:

172

La réponse est vraiment simple;

import java.sql.Date;
...
LocalDate locald = LocalDate.of(1967, 06, 22);
Date date = Date.valueOf(locald); // Magic happens here!
r.setDateOfBirth(date);

Si vous souhaitez le convertir dans l'autre sens, procédez comme suit:

Date date = r.getDate();
LocalDate localD = date.toLocalDate();

rest le dossier que vous utilisez à OJOQ et .getDate()est la méthode pour retirer la date de votre dossier; disons que vous avez une colonne de date appelée date_of_birth, alors votre méthode get devrait être appelée getDateOfBirth().

Gemtastique
la source
4
Il s'agit d'un "horrible hack" selon le java.time. * Author: stackoverflow.com/questions/33066904
...
15
Vous vous référez à des questions sur java.util.Date PAS java.sql.Date dont traite cette question.
Gemtastic
0

Si vous voulez la date actuelle:

Date date = Date.valueOf(LocalDate.now());

Si vous souhaitez une date précise:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));
RichardK
la source
1
Ce n'est que plus rapide si vous voulez le moment actuel, si vous voulez une date spécifique, comme cela pourrait être le cas lorsque vous avez affaire à la date de naissance de quelqu'un, cela ne fonctionnera pas du tout.
Gemtastic
Oui, c'est pour insérer la date actuelle, par exemple lorsque vous créez un objet et que vous souhaitez conserver la date de création.
RichardK
Ce qui est important à noter car la question initiale concerne la création d'une date spécifique. C'est une note pour tous les copieurs. Vous POUVEZ en ligne la bonne réponse avec Date date = Date.valueOf(LocalDate.of(1967, 06, 22));si vous voulez le faire «plus vite».
Gemtastic
-1

Avez-vous essayé d'utiliser la méthode toDate () de LocalDate?

Un péché:

Record r = new Record();
LocalDate date = new Date(1967, 06, 22);
r.setDateOfBirth(date.toDate());

En général, c'est une bonne idée de spécifier comment il échoue plutôt que de simplement dire «il échoue».

juhist
la source
Pour être honnête, je n'ai posté la question que pour publier ma réponse afin que vous puissiez la trouver lorsque vous google. J'ai dû le comprendre moi-même parce que Goodle n'avait pas cette question ou réponse.
Gemtastic
6
Eh bien, maintenant vous avez deux réponses, plus on est de fous. Je ne pense pas qu'il y ait quelque chose de mal à répondre à vos propres messages.
juhist
J'espère que cela aidera quelqu'un à ma place à l'avenir.
Gemtastic
2
L'OP a écrit: «[…] tout ce que je peux trouver, ce sont des trucs de temps Joda. Je n'utilise pas Java 8 ». Votre réponse, cependant, est juste plus de trucs Joda au lieu d'une réponse Java 8.
Michael Piefel
1
LocalDate.toDate () n'existe que dans la version Joda de LocalDate, pas dans la version standard de la bibliothèque.
Rörd