Java 日期/时间

java.sql.Date 类

java.sql.Date 是 Java 标准库中用于处理数据库日期的类,用于 JDBC API 中,位于 java.sql 包下,主要用于与数据库交互时表示日期类型(不包含时间信息)。如果你需要在 java.sql.PreparedStatement 上设置日期,或者从 java.sql.ResultSet 中获取日期,你将会用到 java.sql.Date。

注意:java.sql.Date 继承自 java.util.Date,但对时间部分做了特殊处理。如下图:

image.png

以下是实例化一个 java.sql.Date 的方法:

import java.sql.Date;

public class SqlDateExample {

    public static void main(String[] args) {
        // 1. 通过毫秒数创建
        long currentTimeMillis = System.currentTimeMillis();
        Date sqlDate1 = new Date(currentTimeMillis);
        System.out.println("通过毫秒数创建: " + sqlDate1); // 格式: yyyy-mm-dd

        // 2. 通过字符串创建
        Date sqlDate2 = Date.valueOf("2023-10-05");
        System.out.println("通过字符串创建: " + sqlDate2);

        // 3. 转换为毫秒数
        long time = sqlDate2.getTime();
        System.out.println("对应的毫秒数: " + time);
    }

}

运行结果:

通过毫秒数创建: 2025-09-04
通过字符串创建: 2023-10-05
对应的毫秒数: 1696435200000

常用方法

java.sql.Date 的常用方法如下:

  • valueOf(String s):将符合 yyyy-[m]m-[d]d 格式的字符串转换为 java.sql.Date 对象。

  • toString():返回 yyyy-mm-dd 格式的字符串。

  • 继承自 java.util.Date 的方法(如 getTime()、setTime() 等)。

示例:

import java.sql.Date;

public class SqlDateMethodsExample {
    public static void main(String[] args) {
        // 1. 使用 valueOf() 方法:将字符串转换为 java.sql.Date
        // 字符串格式必须为 yyyy-mm-dd(月份和日期可为1位或2位)
        Date date1 = Date.valueOf("2024-5-1");  // 5月1日
        Date date2 = Date.valueOf("2024-10-08"); // 10月8日
        System.out.println("通过 valueOf() 创建的日期1: " + date1);
        System.out.println("通过 valueOf() 创建的日期2: " + date2);

        // 2. 使用 toString() 方法:返回 yyyy-mm-dd 格式的字符串
        String dateStr = date2.toString();
        System.out.println("date2 转换为字符串: " + dateStr);

        // 3. 继承自 java.util.Date 的方法
        // getTime():获取自1970-01-01 00:00:00 GMT以来的毫秒数
        long timeMillis = date1.getTime();
        System.out.println("date1 对应的毫秒数: " + timeMillis);

        // setTime():通过毫秒数设置日期
        Date date3 = new Date(0); // 初始化为1970-01-01
        System.out.println("初始化 date3: " + date3);
        date3.setTime(timeMillis); // 设置为与 date1 相同的日期
        System.out.println("setTime() 后 date3: " + date3);
    }
}

运行结果:

通过 valueOf() 创建的日期1: 2024-05-01
通过 valueOf() 创建的日期2: 2024-10-08
date2 转换为字符串: 2024-10-08
date1 对应的毫秒数: 1714492800000
初始化 date3: 1970-01-01
setTime() 后 date3: 2024-05-01

java.sql.Date & java.util.Date

java.sql.Date 和 java.util.Date 之间最大的区别在于,java.sql.Date 只保留它所表示的日期中的日期部分,而不保留时间部分。例如,如果你使用 2009年12月24日23:20 这个日期和时间创建一个java.sql.Date,那么时间部分(23:20)会被截断。如果你需要保留时间,那就改用 java.sql.Timestamp。

示例:

public class SqlDateExample2 {

    public static void main(String[] args) {
        long current = System.currentTimeMillis();

        java.sql.Date sqlDate = new java.sql.Date(current);
        System.out.println("java.sql.Date: " + sqlDate);

        java.util.Date utilDate = new java.util.Date(current);
        System.out.println("java.util.Date: " + utilDate);
    }

}

运行结果:

java.sql.Date: 2025-09-04
java.util.Date: Thu Sep 04 22:55:29 CST 2025

注意事项

  • 与 java.util.Date 的区别java.util.Date 包含日期和时间,而 java.sql.Date 仅关注日期,时间部分会被截断。

  • 与数据库交互时,PreparedStatement 的 setDate() 方法通常接受 java.sql.Date 类型。

  • 在 Java 8+ 中,推荐使用新的日期时间 API(java.time 包下的 LocalDate 等),并通过 java.sql.Date.valueOf(LocalDate) 进行转换。如下:

import java.sql.Date;
import java.time.LocalDate;

public class SqlDateConversion {

    public static void main(String[] args) {
        // LocalDate 转 java.sql.Date
        LocalDate localDate = LocalDate.now();
        Date sqlDate = Date.valueOf(localDate);
        System.out.println(sqlDate); // 2025-09-04
        
        // java.sql.Date 转 LocalDate
        LocalDate convertedLocalDate = sqlDate.toLocalDate();
        System.out.println(convertedLocalDate); // 2025-09-04
    }

}

运行结果:

2025-09-04
2025-09-04

  

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号