¿Cómo convertir LocalDate a SQL Date Java?

98

¿Cómo convierto un LocalDate en un java.sql.Date?

Intento:

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

Esto falla (no se compilará) y todo lo que puedo encontrar son cosas de Joda Time.

Estoy usando Java 8

Gemtastic
fuente
posible duplicado de Convert entre LocalDate y sql.Date
assylias
2
@assylias ¿Cómo es la respuesta a la pregunta vinculada mejor que las que se dan aquí? La otra pregunta debería cerrarse como un duplicado de esta, no al revés.
Madara's Ghost
1
@SecondRikudo el duplicado muestra cómo convertir de LocalDate a Date Y viceversa, y por lo tanto parece más general.
assylias

Respuestas:

172

La respuesta es realmente simple;

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

Si desea convertirlo al revés, hágalo así:

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

res el registro que está usando en JOOQ y .getDate()es el método para sacar la fecha de su registro; digamos que tiene una columna de fecha llamada date_of_birth, entonces se debe llamar a su método get getDateOfBirth().

Gemtastic
fuente
4
Este es un "truco horrible" de acuerdo con java.time. * Autor: stackoverflow.com/questions/33066904/…
Dherik
15
Se está refiriendo a preguntas sobre java.util.Date NO de las java.sql.Date que trata esta Pregunta.
Gemtastic
0

Si quieres la fecha actual:

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

Si quieres una fecha específica:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));
RichardK
fuente
1
Esto solo es más rápido si desea el momento actual, si desea una fecha específica, como podría ser el caso cuando se trata de la fecha de nacimiento de alguien, esto no funcionará en absoluto.
Gemtastic
Sí, es para insertar la fecha actual, por ejemplo, cuando crea un objeto y desea conservar la fecha de creación.
RichardK
Lo cual es importante tener en cuenta, ya que la pregunta original se trata de crear una fecha específica. Es una nota para todos los copiadoras que hay. PUEDE en línea la respuesta correcta con Date date = Date.valueOf(LocalDate.of(1967, 06, 22));si desea hacerlo "más rápido".
Gemtastic
-1

¿Ha intentado utilizar el método toDate () de LocalDate?

Como en:

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

En general, es una buena idea especificar cómo falla en lugar de simplemente decir "falla".

juhist
fuente
Para ser honesto, solo publiqué la pregunta para publicar mi respuesta para que pueda encontrarla cuando busque en Google. Tuve que resolverlo por mi cuenta porque Goodle no tenía esta pregunta o respuesta.
Gemtastic
6
Bueno, ahora tienes dos respuestas, cuantas más, mejor. No creo que haya nada de malo en responder tus propias publicaciones.
juhist
Espero que ayude a alguien en mi lugar en el futuro.
Gemtastic
2
El OP escribió “[…] todo lo que puedo encontrar son cosas de Joda Time. Estoy usando Java 8 ”. Sin embargo, su respuesta es más cosas de Joda en lugar de una respuesta de Java 8.
Michael Piefel
1
LocalDate.toDate () existe solo en la versión Joda de LocalDate, no en la versión de biblioteca estándar.
Rörd