Làm thế nào để chuyển đổi LocalDate sang SQL Date Java?


98

Làm cách nào để chuyển đổi LocalDate thành một java.sql.Date?

Cố gắng:

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

Điều này không thành công (sẽ không biên dịch) và tất cả những gì tôi có thể tìm thấy là công cụ thời gian Joda.

Tôi đang sử dụng Java 8



2
@assylias Làm thế nào là câu trả lời cho câu hỏi được liên kết tốt hơn câu trả lời được đưa ra ở đây? Câu hỏi kia nên được đóng lại như một bản sao của câu hỏi này, không phải ngược lại.
Madara's Ghost,

1
@SecondRikudo bản sao hiển thị cách chuyển đổi từ LocalDate thành Date VÀ ngược lại, và do đó có vẻ chung chung hơn.
assylias

Câu trả lời:


172

Câu trả lời thực sự đơn giản;

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

Nếu bạn muốn chuyển đổi nó theo cách khác, bạn làm như sau:

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

rlà bản ghi bạn đang sử dụng trong JOOQ và .getDate()là phương pháp để đưa ngày ra khỏi bản ghi của bạn; giả sử bạn có một cột ngày được gọi là date_of_birth, thì phương thức get của bạn sẽ được gọi getDateOfBirth().


4
Đây là một "vụ hack khủng khiếp" theo java.time. * Tác giả: stackoverflow.com/questions/33066904/…
Dherik

15
Bạn đang hỏi những câu hỏi java.util.Date KHÔNG PHẢI java.sql.Date là Câu hỏi này.
Gemtastic

0

Nếu bạn muốn ngày hiện tại:

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

Nếu bạn muốn một ngày cụ thể:

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

1
Điều này chỉ nhanh hơn nếu bạn muốn thời điểm hiện tại, nếu bạn muốn một ngày cụ thể, như trường hợp bạn đang xử lý ngày sinh của ai đó, điều này sẽ không hoạt động chút nào.
Gemtastic

Có, nó để chèn ngày hiện tại, ví dụ khi bạn tạo đối tượng và muốn duy trì ngày tạo.
RichardK

Điều quan trọng cần lưu ý vì câu hỏi ban đầu là tất cả về việc tạo một ngày cụ thể. Đó là một lưu ý cho tất cả những người sao chép ngoài kia. Bạn CÓ THỂ điền một dòng vào câu trả lời đúng Date date = Date.valueOf(LocalDate.of(1967, 06, 22));nếu bạn muốn làm nó "nhanh hơn".
Gemtastic

-1

Bạn đã thử sử dụng phương thức toDate () của LocalDate chưa?

Như trong:

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

Nói chung, bạn nên chỉ rõ cách nó không thành công thay vì chỉ nói "nó không thành công".


Nói thật là mình chỉ đăng câu hỏi để đăng câu trả lời của mình để các bạn google tìm kiếm. Tôi đã phải tự mình tìm hiểu vì goodle không có câu hỏi hay câu trả lời này.
Gemtastic

6
Vâng, bây giờ bạn có hai câu trả lời sau đó, càng nhiều càng vui. Tôi không nghĩ rằng có bất cứ điều gì sai trong việc trả lời các bài viết của riêng bạn.
sáu

Tôi hy vọng nó sẽ giúp một ai đó ở vị trí của tôi trong tương lai.
Gemtastic

2
OP đã viết “[…] tất cả những gì tôi có thể tìm thấy là thời gian của Joda. Tôi không sử dụng Java 8 ”. Tuy nhiên, câu trả lời của bạn chỉ là nhiều thứ Joda hơn thay vì câu trả lời Java 8.
Michael Piefel

1
LocalDate.toDate () chỉ tồn tại trong phiên bản Joda của LocalDate, không tồn tại trong phiên bản thư viện chuẩn.
Rörd
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.