📅  最后修改于: 2023-12-03 14:53:02.842000             🧑  作者: Mango
在Java中,有时需要将 java.util.Date
类型转换为 java.sql.Date
类型。这通常在使用JDBC进行数据库操作时会遇到,因为JDBC中需要使用 java.sql.Date
来操作日期类型的列。下面介绍两种方法将 java.util.Date
转换为 java.sql.Date
:
java.sql.Date
类中提供了一个带参的构造函数可以将 java.util.Date
类型转换为 java.sql.Date
类型:
public Date(long date)
使用这个构造函数需要传递一个 long
类型的参数,表示自1970年1月1日0时0分0秒起的毫秒数。我们可以通过 java.util.Date
对象的 getTime()
方法获取到这个时间戳。具体代码如下:
import java.sql.Date;
import java.util.Calendar;
public class DateConverter {
public static void main(String[] args) {
// 创建一个 java.util.Date 对象
java.util.Date utilDate = Calendar.getInstance().getTime();
// 将 java.util.Date 转换为 java.sql.Date
Date sqlDate = new Date(utilDate.getTime());
System.out.println("java.util.Date: " + utilDate);
System.out.println("java.sql.Date: " + sqlDate);
}
}
上述代码的输出结果如下:
java.util.Date: Sat Jul 24 11:16:38 CST 2021
java.sql.Date: 2021-07-24
toLocalDate()
方法Java 8 中,java.util.Date
类中新增了一个 toInstant()
方法和 java.time.Instant
类相互转换的方法,而 java.time.Instant
又可以通过 atZone()
方法转换为 java.time.ZonedDateTime
类型,最终通过 toLocalDate()
方法转换为 java.time.LocalDate
类型。
而 java.time.LocalDate
类中提供了一个带参的 of()
静态方法可以将 java.time.LocalDate
类型转换为 java.sql.Date
类型:
public static Date valueOf(LocalDate date)
我们可以利用这个方法将 java.util.Date
转换为 java.sql.Date
。具体代码如下:
import java.sql.Date;
import java.time.LocalDate;
import java.time.ZoneId;
public class DateConverter {
public static void main(String[] args) {
// 创建一个 java.util.Date 对象
java.util.Date utilDate = new java.util.Date();
// 将 java.util.Date 转换为 java.sql.Date
Date sqlDate = Date.valueOf(
utilDate.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate());
System.out.println("java.util.Date: " + utilDate);
System.out.println("java.sql.Date: " + sqlDate);
}
}
上述代码的输出结果与前面的代码相同。