java.sql.Date和java.util.Date区别

215 阅读1分钟

java.sql.Datejava.util.Date 是 Java 中用于处理日期和时间的两个类,但它们有不同的用途和特性。以下是它们的详细比较:

java.util.Date

用途java.util.Date 是 Java 中一个通用的日期和时间类,用于表示特定的瞬间(以毫秒为单位,从 1970 年 1 月 1 日 00:00:00 GMT 开始计数)。

特点

  • 提供了日期和时间的基本操作方法。
  • 设计较为古老,不推荐在新代码中使用。
  • 大多数方法已被废弃,建议使用 java.time 包中的类替代。

使用示例

import java.util.Date;

public class UtilDateExample {
    public static void main(String[] args) {
        Date now = new Date();
        System.out.println("Current date and time: " + now);
    }
}

java.sql.Date

用途java.sql.Date 专门用于 JDBC 操作,表示SQL日期值(即没有时间部分的日期)。主要用于和数据库交互时表示日期类型。

特点

  • 仅包含日期(年、月、日),没有时间部分。
  • 扩展自 java.util.Date,但忽略时间部分。
  • 通常用于映射数据库中的DATE列。

使用示例

import java.sql.Date;

public class SqlDateExample {
    public static void main(String[] args) {
        long millis = System.currentTimeMillis();
        Date sqlDate = new Date(millis);
        System.out.println("SQL Date: " + sqlDate);
    }
}

比较总结

  • 范围java.util.Date 包含日期和时间,而 java.sql.Date 仅包含日期。
  • 使用场景java.util.Date 用于通用日期和时间操作,java.sql.Date 用于数据库操作。
  • 替代方案:推荐使用 java.time 包中的类(如 LocalDate, LocalDateTime, Instant)代替 java.util.Datejava.sql.Date

推荐使用java.time

自Java 8起,java.time 包提供了更强大的日期和时间API,避免了许多 java.util.Datejava.sql.Date 的缺陷。以下是使用 LocalDateLocalDateTime 的示例:

import java.time.LocalDate;
import java.time.LocalDateTime;

public class JavaTimeExample {
    public static void main(String[] args) {
        LocalDate localDate = LocalDate.now();
        LocalDateTime localDateTime = LocalDateTime.now();

        System.out.println("Current date: " + localDate);
        System.out.println("Current date and time: " + localDateTime);
    }
}