Wie konvertiere ich LocalDate in SQL Date Java?


95

Wie konvertiere ich ein LocalDate in ein java.sql.Date?

Versuch:

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

Dies schlägt fehl (wird nicht kompiliert) und alles was ich finden kann ist Joda Zeit Zeug.

Ich benutze Java 8



2
@assylias Wie ist die Antwort auf die verknüpfte Frage besser als die hier angegebenen? Die andere Frage sollte als Duplikat davon geschlossen werden, nicht umgekehrt.
Madaras Geist

1
@SecondRikudo Das Duplikat zeigt, wie von LocalDate nach Date UND umgekehrt konvertiert wird, und erscheint daher allgemeiner.
Assylias

Antworten:


167

Die Antwort ist wirklich einfach;

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

Wenn Sie es umgekehrt konvertieren möchten, gehen Sie folgendermaßen vor:

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

rist der Datensatz, den Sie in JOOQ verwenden, und .getDate()ist die Methode, um das Datum aus Ihrem Datensatz zu entfernen . Angenommen, Sie haben eine Datumsspalte mit dem Namen date_of_birth. Dann sollte Ihre get-Methode aufgerufen werden getDateOfBirth().


4
Dies ist ein "schrecklicher Hack" laut java.time. * Autor: stackoverflow.com/questions/33066904/…
Dherik

14
Sie beziehen sich auf Fragen zu java.util.Date NOT, um java.sql.Date die es in dieser Frage geht.
Gemtastic

0

Wenn Sie das aktuelle Datum möchten:

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

Wenn Sie ein bestimmtes Datum wünschen:

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

1
Dies ist nur schneller, wenn Sie den aktuellen Moment möchten, wenn Sie ein bestimmtes Datum möchten, wie dies der Fall sein kann, wenn Sie sich mit dem Geburtsdatum einer Person befassen. Dies funktioniert überhaupt nicht.
Gemtastic

Ja, Sie müssen das aktuelle Datum einfügen, z. B. wenn Sie ein Objekt erstellen und das Erstellungsdatum beibehalten möchten.
RichardK

Dies ist wichtig zu beachten, da es bei der ursprünglichen Frage nur darum geht, ein bestimmtes Datum zu erstellen. Es ist eine Notiz für alle Kopierer da draußen. Sie KÖNNEN online die richtige Antwort mit, Date date = Date.valueOf(LocalDate.of(1967, 06, 22));wenn Sie es "schneller" tun möchten.
Gemtastic

-1

Haben Sie versucht, die toDate () -Methode von LocalDate zu verwenden?

Wie in:

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

Im Allgemeinen ist es eine gute Idee, anzugeben, wie es fehlschlägt, anstatt nur "es schlägt fehl" zu sagen.


Um ehrlich zu sein, habe ich die Frage nur gepostet, um meine Antwort zu posten, damit Sie sie finden können, wenn Sie googeln. Ich musste es selbst herausfinden, weil Goodle diese Frage oder Antwort nicht hatte.
Gemtastic

6
Nun, jetzt haben Sie zwei Antworten, je mehr desto besser. Ich glaube nicht, dass etwas falsch ist, wenn Sie Ihre eigenen Beiträge beantworten.
juhist

Ich hoffe, es wird in Zukunft jemandem an meiner Stelle helfen.
Gemtastic

2
Das OP schrieb: „[…] Alles, was ich finden kann, ist Joda-Zeitzeug. Ich lasse Java 8 los “. Ihre Antwort ist jedoch nur mehr Joda-Zeug anstelle einer Java 8-Antwort.
Michael Piefel

1
LocalDate.toDate () existiert nur in der Joda-Version von LocalDate, nicht in der Standardbibliotheksversion.
Rörd
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.