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



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().


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));

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”.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.