📜  如何将Java.util.Date到Java.sql.Date在Java中?(1)

📅  最后修改于: 2023-12-03 14:53:02.842000             🧑  作者: Mango

如何将Java.util.Date到Java.sql.Date在Java中?

在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);
    }
}

上述代码的输出结果与前面的代码相同。