Come convertire LocalDate in SQL Date Java?


98

Come si converte un LocalDate in un java.sql.Date?

Tentativo:

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

Questo fallisce (non si compila) e tutto quello che riesco a trovare è roba del tempo di Joda.

Sto usando Java 8



2
@assylias In che modo la risposta alla domanda collegata è migliore di quelle fornite qui? L'altra domanda dovrebbe essere chiusa come un duplicato di questa, non viceversa.
Il fantasma di Madara

1
@SecondRikudo il duplicato mostra come convertire da LocalDate a Date E viceversa, e quindi sembra più generale.
assylias

Risposte:


172

La risposta è davvero semplice;

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

Se vuoi convertirlo al contrario, fallo in questo modo:

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

rè il record che stai utilizzando in JOOQ ed .getDate()è il metodo per ottenere la data dal tuo record; diciamo che hai una colonna della data chiamata date_of_birth, quindi il tuo metodo get dovrebbe essere chiamato getDateOfBirth().


4
Si tratta di un "hack orribile", secondo con la java.time * autore:. Stackoverflow.com/questions/33066904/...
Dherik

15
Ti riferisci a domande su java.util.Date NON di java.sql.Date cui tratta questa Domanda.
Gemtastic

0

Se vuoi la data corrente:

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

Se vuoi una data specifica:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));

1
Questo è solo più veloce se vuoi il momento attuale, se vuoi una data specifica, come potrebbe essere il caso quando hai a che fare con la data di nascita di qualcuno, questo non funzionerà affatto.
Gemtastic

Sì, è per inserire la data corrente, ad esempio quando crei un oggetto e vuoi mantenere la data di creazione.
RichardK

Ciò è importante da notare poiché la domanda originale riguarda la creazione di una data specifica. È una nota per tutti i copisti là fuori. Puoi oneline la risposta corretta con Date date = Date.valueOf(LocalDate.of(1967, 06, 22));se vuoi farlo "più velocemente".
Gemtastic

-1

Hai provato a utilizzare il metodo toDate () di LocalDate?

Come in:

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

In generale, è una buona idea specificare come fallisce piuttosto che dire semplicemente "fallisce".


Ad essere onesti, ho pubblicato la domanda solo per pubblicare la mia risposta in modo che tu possa trovarla quando cerchi su Google. Ho dovuto capirlo da solo perché Goodle non aveva questa domanda o risposta.
Gemtastic

6
Bene, ora hai due risposte, più sono meglio è. Non credo ci sia nulla di sbagliato nel rispondere ai tuoi post.
juhist

Spero che in futuro possa aiutare qualcuno al mio posto.
Gemtastic

2
L'OP ha scritto "[…] tutto quello che posso trovare è roba del tempo di Joda. Sto cancellando Java 8 ”. La tua risposta, tuttavia, è solo più roba Joda invece di una risposta Java 8.
Michael Piefel

1
LocalDate.toDate () esiste solo nella versione Joda di LocalDate, non nella versione della libreria standard.
Rörd
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.