Як конвертувати LocalDate в SQL Date Java?


98

Як перетворити LocalDate у java.sql.Date?

Спроба:

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

Це не вдається (не компілюється), і все, що я можу знайти, - це речі Joda time.

Я використовую Java 8



2
@assylias Наскільки відповідь на пов'язане запитання є кращою, ніж відповіді, подані тут? Інше питання слід закрити як дублікат цього, а не навпаки.
Привид

1
@SecondRikudo дублікат показує, як конвертувати з LocalDate в Date І навпаки, і тому здається більш загальним.
assylias

Відповіді:


172

Відповідь справді проста;

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

Якщо ви хочете перетворити його навпаки, ви робите це так:

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

r- це запис, який ви використовуєте в JOOQ, і .getDate()спосіб отримання дати з вашого запису; припустимо, у вас є стовпець дати з назвою date_of_birth, тоді слід викликати ваш метод get getDateOfBirth().


4
Це «жахливий хак» в відповідно до java.time * Автор :. Stackoverflow.com/questions/33066904 / ...
Dherik

15
Ви звертаєтесь до запитань про те, java.util.Date НЕ про java.sql.Dateяке це Питання.
Gemtastic

0

Якщо вам потрібна поточна дата:

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

Якщо вам потрібна конкретна дата:

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

1
Це відбувається лише швидше, якщо ви хочете поточного моменту, якщо вам потрібна конкретна дата, як це може бути у випадку, коли ви маєте справу з чиюсь дату народження, це взагалі не спрацює.
Gemtastic

Так, це вставити поточну дату, наприклад, коли ви створюєте об'єкт і хочете зберегти дату створення.
RichardK

Що важливо відзначити, оскільки вихідне питання стосується створення конкретної дати. Це примітка для всіх копіювальників. Ви МОЖЕТЕ на одній лінії вказати правильну відповідь, Date date = Date.valueOf(LocalDate.of(1967, 06, 22));якщо хочете зробити це "швидше".
Gemtastic

-1

Ви пробували використовувати метод toDate () LocalDate?

А саме:

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

Загалом, гарною ідеєю є вказати, як це не вдається, а не просто сказати "це не вдається".


Чесно кажучи, я розмістив питання лише для того, щоб опублікувати свою відповідь, щоб ви могли знайти його, коли погуглите. Мені довелося це зрозуміти самостійно, бо у Гудла не було цього запитання чи відповіді.
Gemtastic 20.03.15

6
Ну, тепер у вас є дві відповіді, чим більше, тим веселіше. Я не думаю, що є щось погане у відповіді на ваші власні повідомлення.
джуїст

Сподіваюся, це допоможе комусь на моєму місці в майбутньому.
Gemtastic

2
OP написав: [[]] все, що я можу знайти, - це речі Joda time. Я розпізнаю Java 8 ”. Однак ваша відповідь - це просто більше матеріалів Joda замість відповіді Java 8.
Michael Piefel

1
LocalDate.toDate () існує лише у Joda-версії LocalDate, а не у стандартній бібліотечній версії.
Рьорд,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.