วิธีการแปลง LocalDate เป็น SQL Date Java


101

ฉันจะแปลง LocalDate เป็น a ได้java.sql.Dateอย่างไร

พยายาม:

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

สิ่งนี้ล้มเหลว(จะไม่รวบรวม)และสิ่งที่ฉันพบคือ Joda time stuff

ฉันใช้ Java 8



2
@assylias คำตอบของคำถามที่เชื่อมโยงดีกว่าคำถามที่ให้ไว้ที่นี่อย่างไร? คำถามอื่นควรปิดเนื่องจากซ้ำกับคำถามนี้ไม่ใช่ในทางกลับกัน
Madara's Ghost

1
@SecondRikudo รายการที่ซ้ำกันแสดงวิธีการแปลงจาก LocalDate เป็น Date และในทางกลับกันดังนั้นจึงดูเหมือนทั่วไปมากขึ้น
assylias

คำตอบ:


177

คำตอบนั้นง่ายจริงๆ;

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 getDateOfBirth()แล้ววิธีรับของคุณควรจะเรียกว่า


4
นี่คือ "แฮ็คที่น่ากลัว" ตาม java.time * ผู้เขียน: stackoverflow.com/questions/33066904/…
Dherik

15
คุณกำลังตอบคำถามเกี่ยวกับjava.util.Date NOT 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());

โดยทั่วไปควรระบุว่าล้มเหลวอย่างไรแทนที่จะพูดว่า "ล้มเหลว"


พูดตามตรงฉันโพสต์คำถามเพื่อโพสต์คำตอบเท่านั้นเพื่อให้คุณสามารถค้นหาได้เมื่อคุณใช้ Google ฉันต้องคิดด้วยตัวเองเพราะ Goodle ไม่มีคำถามหรือคำตอบนี้
Gemtastic

6
ทีนี้คุณมีสองคำตอบแล้วยิ่งมีความสุขมากขึ้น ฉันไม่คิดว่าจะมีอะไรผิดพลาดในการตอบกระทู้ของคุณเอง
juhist

ฉันหวังว่ามันจะช่วยใครสักคนเข้ามาแทนที่ฉันในอนาคต
Gemtastic

2
OP เขียนว่า“ […] ทั้งหมดที่ฉันหาได้คือสิ่งของเกี่ยวกับเวลา Joda ฉันกำลังเลิกใช้ Java 8” อย่างไรก็ตามคำตอบของคุณเป็นเพียงสิ่งที่ Joda มากกว่าคำตอบ Java 8
Michael Piefel

1
LocalDate.toDate () มีเฉพาะใน LocalDate เวอร์ชัน Joda เท่านั้นไม่มีในเวอร์ชันไลบรารีมาตรฐาน
Rörd
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.