Skip to content

JDK8之前

Date类

Java 中有两个包里有 Date 类,分别是 java.util.Date 和 java.sql.Date,前者是后者的父类包。

java.util.Date包

java.util.Date包 包含时间和日期,可以精确到毫秒,适用于 一般的日期和时间操作,比如获取当前时间、计算时间差等。

构造器作用
new Date()空参构造器
new Date(long date)传递时间戳的构造器

常用方法:

方法作用
toString()输出当前时间
getTime()获取当前时间的时间戳
java
import java.util.Date;

@Test
public void junitTest() {
  Date date = new Date();
  //获取当前时间
  String currentTime = date.toString();
  System.out.println(currentTime); //Sat Dec 14 22:15:38 CST 2024

  //获取时间戳
  long milliTime = date.getTime();
  System.out.println(milliTime);  //1734185738510

  //根据时间戳获取时间
  Date date1 = new Date(1734185738510L); //添加L,显式指明是long类型
  System.out.println(date1.toString());  //Sat Dec 14 22:15:38 CST 2024
}

java.sql.Date包

java.sql.Date包只包含日期,没有时间部分,主要用于 与数据库进行交互,将 Java 的日期数据映射到数据库的 DATE 类型。

构造器作用
new Date(long date)传递时间戳的构造器
java
import java.sql.Date;

@Test
public void junitTest() {
  Date date = new Date(1734185738510L);
  System.out.println(date.toString()); //2024-12-14

  long milliTime = date.getTime();
  System.out.println(milliTime);       //1734185738510
}

SimpleDataFormat类

SimpleDataFormat 类是处理时间日期的一个工具类,属于 java.text.DateFormat包下,主要用于 将 Date 对象与字符串形式的日期和时间相互转换

格式化(日期 → 文本)

解析(文本 → 日期)

java
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;

public static void main(String[] args) throws ParseException {
  Date now = new Date();
  //创建 SimpleDateFormat 对象,指定格式
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

  //格式化日期
  String strNow = sdf.format(now);
  System.out.println(strNow); //2024-12-15 11:09:57

  //解析字符串
  Date parsedDate = sdf.parse("2024-12-15 11:09:05");
  System.out.println(parsedDate); //Sun Dec 15 11:09:05 CST 2024
}

Calender类

Calender类(日历类)是用来 处理日期和时间的一个类。在 Java1.1 版本中,Calender类 就已经取代了 Date 类中的很多方法。

它使用了 abstract关键字修饰,因此它不需要通过 new 创建实例,而是直接 通过 Calendar.getInstance() 获取

常用方法:

方法作用
get()获取年月日时分秒
set()自定义设置年月日时分秒
add()添加时间
getTime()获取当前时间
setTime()设置当前时间

注意

get() 和 set() 设置月份时,需要注意 0 表示一月份,0-11表示一年的12个月。

java
public static void main(String[] args) {
  //获取Calendar实例
  Calendar calendar = Calendar.getInstance();

  int year = calendar.get(Calendar.YEAR);
  int month = calendar.get(Calendar.MONTH) + 1; //从0开始,0表示一月份
  int day = calendar.get(Calendar.DATE);
  int hour = calendar.get(Calendar.HOUR_OF_DAY);
  int minute = calendar.get(Calendar.MINUTE);
  int second = calendar.get(Calendar.SECOND);

  String strData = String
    .format("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, minute, second); 
  System.out.println(strData);     //2024-11-15 11:57:33

  //可以手动设置年月日时分秒
  calendar.set(Calendar.MONTH, 2); //手动设置为三月份

  //往前/往后添加时间
  calendar.add(Calendar.DATE, 5);   //当前时间往后加5天
  calendar.add(Calendar.DATE, -12); //当前时间往前推3天

  //获取当前时间
  Date time = calendar.getTime();   //Sun Mar 17 11:59:37 CST 2024
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  String formatTime = sdf.format(time);
  System.out.println(formatTime);   //2024-12-17 11:59:37

  //手动设置时间
  Date now = new Date(1234235288845L);
  calendar.setTime(now);
  System.out.println(calendar.getTime()); //Tue Feb 10 11:08:08 CST 2009
}
练习题1

需求:如何将 java.util.Date 下的时间转换为 java.sql.Date 下的时间?

思路:把 java.util.date 的时间转换为时间戳,再传递给 java.sql.date 的构造函数。

java
public static void main(String[] args) throws ParseException {
  java.util.Date date = new java.util.Date();
  java.sql.Date sqlDate = new java.sql.Date(date.getTime());
  System.out.println(sqlDate);
}
练习题2

需求:如何把字符串类型的时间,转换为 java.sql.Date 下的时间?

思路:把字符串转为 java.util.Date 下的时间,然后再转为 java.sql.Date 的时间。

java
public static void main(String[] args) throws ParseException {
  String time = "2024-12-15";
  //将字符串形式的时间,转换为 util 下的时间
  SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  Date date = sdf.parse(time);

  //再把 util 下的时间,转换为 sql 下的时间
  java.sql.Date sqlDate = new java.sql.Date(date.getTime());
  System.out.println(sqlDate); //2024-12-15
}

Released under the MIT License.