2017-07-14 126 views

回答

8

LocalDateTimejava.sql.Date之间没有直接关系,因为前者是 - 时间戳,后者是 - 日期。

有,然而,LocalDatejava.sql.Date和转换之间的关系是可以做到这样的:

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

这对于任何给定的LocalDateTime为您提供了以下代码:

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

@M. Prokhorov's answer is correct ,我只想补充几点。

A java.sql.Date只保留日,月和年的值。 时间值(小时,分钟,秒和毫秒)are all set to zero。所以,在将LocalDateTime转换为java.sql.Date时,这些字段会丢失。

如果你做一个单向转换,并且不介意丢失这些领域,那么它的确定做到这一点:

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

但是,如果你想以后恢复原来LocalDateTime,它的更好保存时间字段separetely,这样你就可以恢复它:

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

此答案必须是此问题的正确答案+1。 –

0

将从LocalDateTime到java.sql.Date - 保留一部分时间

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

java.sql.Date基本上是一个从1970年1月1日00:00:00 GMT开始经过毫秒的包装,因此此转换不会保留LocalDateTime中的时区信息。

相关问题