2017-07-14 30 views

Trả lời

8

Không có mối tương quan trực tiếp giữa LocalDateTimejava.sql.Date, vì trước đây là dấu thời gian và ngày sau là ngày.

Có, tuy nhiên, một mối quan hệ giữa LocalDatejava.sql.Date, và chuyển đổi có thể được thực hiện như thế này:

LocalDate date = //your local date 
java.sql.Date sqlDate = java.sql.Date.valueOf(date) 

nào đối với bất kỳ LocalDateTime được cung cấp cho bạn đoạn mã sau:

LocalDateTime dateTime = // your ldt 
java.sql.Date sqlDate = java.sql.Date.valueOf(dateTime.toLocalDate()); 
11

@M. Prokhorov's answer is correct , Tôi chỉ muốn thêm một vài điểm.

A java.sql.Date chỉ giữ giá trị ngày, tháng và năm. Các giá trị thời gian (giờ, phút, giây và mili giây) are all set to zero. Vì vậy, khi chuyển đổi LocalDateTime thành java.sql.Date, các trường này sẽ bị mất.

Nếu bạn đang làm một sự chuyển đổi một chiều và không ngại mất đi những lĩnh vực, sau đó nó ok để làm điều đó:

LocalDateTime dt = // LocalDateTime value 
// convert to Date (time information is lost) 
java.sql.Date date = java.sql.Date.valueOf(dt.toLocalDate()); 

Nhưng nếu bạn muốn khôi phục lại bản gốc LocalDateTime sau, nó tốt hơn để lưu các lĩnh vực thời gian separetely, vì vậy bạn có thể khôi phục lại nó:

LocalDateTime dt = // your LocalDateTime 
// save time information (hour, minute, seconds, fraction of seconds) 
LocalTime savedTime = dt.toLocalTime(); 
// convert to Date (time information is lost) 
java.sql.Date date = java.sql.Date.valueOf(dt.toLocalDate()); 

// retrieve back the LocalDate (only day/month/year) 
LocalDate localDate = date.toLocalDate(); 
// retrieve the LocalDateTime, with the original time values 
LocalDateTime ldt = localDate.atTime(savedTime); 
+1

Câu trả lời này phải là câu trả lời đúng của câu hỏi này +1. –

0

Chuyển đổi từ LocalDateTime để java.sql.Date - duy trì thời gian một phần

LocalDateTime dt = // your LocalDateTime 
long epochMillis = dt.atZone(ZoneOffset.UTC).toInstant().toEpochMilli() 
java.sql.Date date = new java.sql.Date(epochMillis); 

java.sql.Date về cơ bản là trình bao bọc cho mili giây đã trôi qua kể từ ngày 1 tháng 1 năm 1970 00: 00: 00.000 GMT, do đó chuyển đổi này sẽ không giữ lại thông tin múi giờ từ LocalDateTime.

Các vấn đề liên quan