Bagaimana cara mengubah LocalDate ke SQL Date Java?

101

Bagaimana cara mengonversi LocalDate menjadi java.sql.Date?

Mencoba:

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

Ini gagal (tidak dapat dikompilasi) dan yang dapat saya temukan hanyalah hal-hal waktu Joda.

Saya menggunakan Java 8

Gemtastic
sumber
kemungkinan duplikat Konversi antara LocalDate dan sql.Date
assylias
2
@assylias Bagaimana jawaban untuk pertanyaan terkait lebih baik dari yang diberikan di sini? Pertanyaan lain harus ditutup sebagai duplikat dari ini, bukan sebaliknya.
Hantu Madara
1
@SecondRikudo duplikatnya menunjukkan cara mengonversi dari LocalDate ke Date DAN sebaliknya, dan karenanya tampak lebih umum.
assylias

Jawaban:

177

Jawabannya sangat sederhana;

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

Jika Anda ingin mengubahnya sebaliknya, lakukan seperti ini:

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

radalah catatan yang Anda gunakan di JOOQ dan .getDate()merupakan metode untuk mengeluarkan tanggal dari catatan Anda; misalkan Anda memiliki kolom tanggal yang disebut date_of_birth, maka metode get Anda harus dipanggil getDateOfBirth().

Gemtastic
sumber
4
Ini adalah "peretasan yang mengerikan" menurut java.time. * Penulis: stackoverflow.com/questions/33066904/…
Dherik
15
Anda mengacu pada pertanyaan tentang java.util.Date TIDAK java.sql.Date yang membahas tentang Pertanyaan ini.
Gemtastic
0

Jika Anda ingin tanggal sekarang:

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

Jika Anda menginginkan tanggal tertentu:

Date date = Date.valueOf(LocalDate.of(1967, 06, 22));
RichardK
sumber
1
Ini hanya lebih cepat jika Anda menginginkan momen saat ini, jika Anda menginginkan tanggal tertentu, seperti yang mungkin terjadi ketika Anda berurusan dengan tanggal lahir seseorang, ini tidak akan berfungsi sama sekali.
Gemtastic
Ya, itu untuk memasukkan tanggal sekarang, misalnya ketika Anda membuat objek dan ingin mempertahankan tanggal pembuatan.
RichardK
Yang penting untuk diperhatikan karena pertanyaan awal adalah tentang membuat tanggal tertentu. Ini adalah catatan untuk semua copy-paster di luar sana. Anda BISA langsung menjawab dengan benar Date date = Date.valueOf(LocalDate.of(1967, 06, 22));jika Anda ingin melakukannya "lebih cepat".
Gemtastic
-1

Sudahkah Anda mencoba menggunakan metode toDate () dari LocalDate?

Seperti dalam:

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

Secara umum, adalah ide yang baik untuk menentukan bagaimana gagal daripada hanya mengatakan "gagal".

ahli agama
sumber
Sejujurnya, saya hanya memposting pertanyaan untuk memposting jawaban saya sehingga Anda dapat menemukannya ketika Anda google. Saya harus memikirkannya sendiri karena goodle tidak memiliki pertanyaan atau jawaban ini.
Gemtastic
6
Nah, sekarang Anda memiliki dua jawaban, lebih banyak lebih menyenangkan. Saya rasa tidak ada yang salah dalam menjawab kiriman Anda sendiri.
ahli hukum
Saya berharap ini akan membantu seseorang menggantikan saya di masa depan.
Gemtastic
2
OP menulis “[…] yang bisa saya temukan hanyalah hal-hal tentang waktu Joda. Saya unsing Java 8 ”. Jawaban Anda, bagaimanapun, hanyalah lebih banyak barang Joda daripada jawaban Java 8.
Michael Piefel
1
LocalDate.toDate () hanya ada dalam versi Joda dari LocalDate, bukan dalam versi perpustakaan standar.
Rörd