在Java 8中的LocalDateTime到java.sql.Date?

Aje*_*mar 13 datetime-conversion java-8 java-time

如何转换LocalDateTimejava.sql.Date

我的网上搜索大多是给我Timestamp相关的代码或LocalDatejava.sql.Date.我在寻找LocalDateTimejava.sql.Date.

小智 20

@M.普罗霍罗夫的回答是正确的,我只想补充几点.

A java.sql.Date仅保留日,月和年值.所述时间值(小时,分钟,秒和毫秒)都被设置为零.因此,在将a转换LocalDateTime为a时java.sql.Date,这些字段将丢失.

如果您正在进行单向转换并且不介意丢失这些字段,那么可以这样做:

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

但是如果你想LocalDateTime稍后恢复原始版本,最好是单独保存时间字段,这样你就可以恢复它:

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);
Run Code Online (Sandbox Code Playgroud)


M. *_*rov 16

LocalDateTime和之间没有直接关联java.sql.Date,因为前者是时间戳,后者是 - 日期.

但是,LocalDate和之间存在关系java.sql.Date,并且可以像这样进行转换:

LocalDate date = //your local date
java.sql.Date sqlDate = java.sql.Date.valueOf(date)
Run Code Online (Sandbox Code Playgroud)

哪个LocalDateTime给出了以下代码:

LocalDateTime dateTime = // your ldt
java.sql.Date sqlDate = java.sql.Date.valueOf(dateTime.toLocalDate());
Run Code Online (Sandbox Code Playgroud)

  • java.Sql.Date确实保留了时间分量。此解决方案导致时间部分丢失。 (4认同)
  • @AndyThomas,这个问题是关于将 DateTime 转换为 `sql.Date`,显然它不关心保留时间。如果我们关心这一点,我们就会转换为`sql.Timestamp`。 (2认同)