Java 8中的java.sql.Date的LocalDateTime?
问题描述:
如何转换LocalDateTime
至java.sql.Date
在java-8?Java 8中的java.sql.Date的LocalDateTime?
我在互联网上的搜索主要是给我Timestamp
相关的代码或LocalDate
到java.sql.Date
。我正在寻找LocalDateTime
至java.sql.Date
。
答
LocalDateTime
和java.sql.Date
之间没有直接关系,因为前者是 - 时间戳,后者是 - 日期。
有,然而,LocalDate
和java.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());
答
@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);
答
将从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
中的时区信息。
此答案必须是此问题的正确答案+1。 –