LocalDateTime to java.sql.Date in java 8?



如何在java-8中将LocalDateTime转换为java.sql.Date

我在互联网上的搜索主要给我Timestamp相关的代码或LocalDatejava.sql.Date。我正在寻找LocalDateTimejava.sql.Date.

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());

@M。Prokhorov的回答是正确的,我只想补充几点。

java.sql.Date仅保留日、月和年值。时间值(小时、分钟、秒和毫秒(均设置为零。因此,当将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,最好将时间字段分开保存,以便您可以恢复它:

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,同时保留时间部分,而无需使用 java.util.Date 作为中介对时区做出假设:

LocalDateTime dateValue = // your LocalDateTime
java.util.Date utilDate;
String dateFormat = "yyyy-MM-dd'T'HH:mm:ss";
DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern(dateFormat);
SimpleDateFormat sdf1 = new SimpleDateFormat(dateFormat);
try {
utilDate = sdf1.parse(dateValue.format(dtf1));
} catch (ParseException e) {
utilDate = null; // handle the exception
}
java.sql.Date sqlDate = new java.sql.Date(utilDate.getTime());

你可以从LocalDateTime获取java.sql.Date对象,但它不是很漂亮。

new Date(Timestamp.valueOf(LocalDateTime.now()).getTime())

最新更新