首页 > 编程笔记 > Java笔记 阅读:14

Java Date日期类的用法(附带实例)

在 Java 中,当我们想要获取日期相关的信息时可以使用日期类(Date),该类提供了年月日时分秒的时间信息。通常我们可以使用 new Date() 方法来获取运行时的当前时间,时间精度达到毫秒级。

可以通过两种方式来创建 Date 对象,以下是两种构造方法:
下面的程序演示了这两种构造方法创建 Date 对象:
public class DateTest {
    public static void main(String[] args) {
        Date date = new Date();
        Date date2 = new Date(1000000);
        System.out.println(date);
        System.out.println(date2);
    }
}
输出结果为:

Mon Sep 12 23:41:47 CST 2022
Thu Jan 01 08:16:40 CST 1970


Date 类的常用方法如下表所示,主要用于时间前后的判断以及获取时间对应的毫秒值:

表:Date类的常用方法
方法名 描述
after(Date when) 判断当前 Date 对象是否在指定日期之后
before(Date when) 判断当前 Date 对象是否在指定日期之前
equals(Object obj) 判断两个 Date 对象的时间是否相同
getTime() 返回从 1970 年 1 月 1 日 0 时 0 分 0 秒开始所经过的毫秒数

下面是一个简单的 Date 类的使用示例,运行程序后先获取当前时间,休眠三秒后继续获取当前时间,然后比较这两个时间的前后关系:
public class DateTest {
    public static void main(String[] args) throws InterruptedException {
        Date date = new Date();
        Thread.sleep(3000);
        Date date2 = new Date();
        System.out.println(date.after(date2));
        System.out.println(date.before(date2));
        System.out.println(date.getTime());
    }
}
输出结果为:

false
true
1661177772753

构造 Date 对象时需要使用毫秒值,而且很难按照我们自定义的格式输出日期和时间,比如将 Date 对象以“xxxx年xx月xx日xx时xx分xx秒”的格式输出,此时就需要日期格式化类(SimpleDateFormat)了。通过 SimpleDateFormat 类不仅可以实现日期到文本的格式化,还可以实现文本到日期的解析。

下面展示了如何把 Date 对象转换成指定格式的文本,通常我们需要在创建 SimpleDateFormat 对象时指定日期和时间的格式,然后调用 SimpleDateFormat 对象的 format() 方法进行转换。
public class DateTest {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("现在是yyyy年MM月dd日 HH时mm分ss秒");
        String str = sdf.format(date);
        System.out.println(str);
    }
}
运行后输出“现在是2025年04月29日 08时25分35秒”。

反过来,如果想要通过指定格式的文本获取 Date 对象也可以通过 SimpleDateFormat 类来实现:
public class DateTest {
    public static void main(String[] args) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        Date date = null;
        try {
           date = sdf.parse("2022-08-23 10:30:30");
        } catch (ParseException e) {
           e.printStackTrace();
        }
        System.out.println(date);
    }
}
我们先指定格式并创建 SimpleDateFormat 对象,然后就可以调用其 parse() 方法将指定格式的文本解析成对应的 Date 对象。

在创建 SimpleDateFormat 对象时需要指定格式,比如“yyyy”之类的,这些其实是 SimpleDateFormat 内置支持的格式编码,都是可以直接使用的,常用的格式编码如下表所示。

表:日期格式编码
格式编码 描述
y 表示年份
M 表示月份
d 表示天
H 表示小时
m 表示分
s 表示秒
S 表示毫秒
E 表示星期几
D 表示一年中的第几天
w 表示一年中的第几周
W 表示一个月内的第几周
a 表示上午或下午
Z 表示时区

下面是这些格式编码的使用示例,大家可以根据输出去理解,也可以自己修改程序并查看输出结果。
import java.util.Date; // 导入Date类
import java.text.SimpleDateFormat; // 导入SimpleDateFormat类

public class DateTest {
    public static void main(String[] args) {
        Date date = new Date();
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy年");
        System.out.println(sdf.format(date));
        sdf = new SimpleDateFormat("MM月dd日");
        System.out.println(sdf.format(date));
        sdf = new SimpleDateFormat("HH小时mm分钟ss秒SS毫秒");
        System.out.println(sdf.format(date));
        sdf = new SimpleDateFormat("现在是上午还是下午?a");
        System.out.println(sdf.format(date));
        sdf = new SimpleDateFormat("当前的时区是Z");
        System.out.println(sdf.format(date));
        sdf = new SimpleDateFormat("今天是周几?E");
        System.out.println(sdf.format(date));
        sdf = new SimpleDateFormat("今天是一年中的第D天,第w周");
        System.out.println(sdf.format(date));
    }
}
输出结果:

2025年
04月29日
03小时20分钟52秒667毫秒
现在是上午还是下午?AM
当前的时区是+0000
今天是周几?Tue
今天是一年中的第119天,第18周

相关文章