Jak przekonwertować LocalDate na SQL Date Java?

101

Jak przekonwertować LocalDate na java.sql.Date?

Próba:

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

To się nie udaje (nie można się skompilować) i wszystko, co mogę znaleźć, to czas Jody.

Używam Java 8

Gemtastic
źródło
możliwy duplikat Convert between LocalDate i sql.Date
assylias
2
@assylias W jaki sposób odpowiedź na pytanie, do którego prowadzi łącze, jest lepsza od podanej tutaj? Drugie pytanie należy zamknąć jako duplikat tego, a nie odwrotnie.
Madara's Ghost
1
@SecondRikudo duplikat pokazuje, jak konwertować z LocalDate na Date ORAZ odwrotnie, dlatego wydaje się bardziej ogólny.
assylias

Odpowiedzi:

176

Odpowiedź jest naprawdę prosta;

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

Jeśli chcesz przekonwertować go na odwrót, zrób to w ten sposób:

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

rjest rekordem, którego używasz w JOOQ i .getDate()jest metodą uzyskiwania daty z twojego rekordu; powiedzmy, że masz kolumnę z datą o nazwie date_of_birth, wtedy powinna zostać wywołana metoda get getDateOfBirth().

Gemtastic
źródło
4
To jest "okropny hack" według java.time. * Autor: stackoverflow.com/questions/33066904/ ...
Dherik,
15
Odnosisz się do pytań, których java.util.Date NIE dotyczy java.sql.Date to pytanie.
Gemtastic
0

Jeśli chcesz aktualną datę:

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

Jeśli chcesz konkretną datę:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));
Richard K.
źródło
1
Jest to szybsze tylko wtedy, gdy chcesz poznać aktualny moment, jeśli chcesz określić konkretną datę, jak może się zdarzyć, gdy masz do czynienia z czyjąś datą urodzenia, to w ogóle nie zadziała.
Gemtastic
Tak, służy do wstawienia aktualnej daty, na przykład kiedy tworzysz obiekt i chcesz zachować datę utworzenia.
RichardK,
Co jest ważne, ponieważ pierwotne pytanie dotyczy stworzenia konkretnej daty. To notatka dla wszystkich kserokopiarzy. MOŻESZ udzielić poprawnej odpowiedzi Date date = Date.valueOf(LocalDate.of(1967, 06, 22));online, jeśli chcesz to zrobić „szybciej”.
Gemtastic
-1

Czy próbowałeś użyć metody toDate () obiektu LocalDate?

Jak w:

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

Ogólnie rzecz biorąc, jest to dobry pomysł, aby określić, w jaki sposób zawiedzie, zamiast po prostu powiedzieć „nie powiedzie”.

juhist
źródło
Szczerze mówiąc, opublikowałem to pytanie tylko po to, aby opublikować moją odpowiedź, abyś mógł ją znaleźć, gdy szukasz w Google. Musiałem to rozgryźć samodzielnie, ponieważ goodle nie miał tego pytania ani odpowiedzi.
Gemtastic
6
Więc teraz masz dwie odpowiedzi, im więcej, tym weselej. Nie sądzę, by było coś złego w odpowiadaniu na własne posty.
juhist
Mam nadzieję, że w przyszłości pomoże to komuś na moim miejscu.
Gemtastic
2
OP napisał: „[…] wszystko, co mogę znaleźć, to czas Joda. Odłączam Java 8 ”. Twoja odpowiedź to jednak więcej rzeczy Joda zamiast odpowiedzi Java 8.
Michael Piefel,
1
LocalDate.toDate () istnieje tylko w wersji LocalDate Joda, a nie w standardowej wersji biblioteki.
Rörd