Java Date日期类的用法(附带实例)
在 Java 中,当我们想要获取日期相关的信息时可以使用日期类(Date),该类提供了年月日时分秒的时间信息。通常我们可以使用 new Date() 方法来获取运行时的当前时间,时间精度达到毫秒级。
可以通过两种方式来创建 Date 对象,以下是两种构造方法:
下面的程序演示了这两种构造方法创建 Date 对象:
Date 类的常用方法如下表所示,主要用于时间前后的判断以及获取时间对应的毫秒值:
下面是一个简单的 Date 类的使用示例,运行程序后先获取当前时间,休眠三秒后继续获取当前时间,然后比较这两个时间的前后关系:
下面展示了如何把 Date 对象转换成指定格式的文本,通常我们需要在创建 SimpleDateFormat 对象时指定日期和时间的格式,然后调用 SimpleDateFormat 对象的 format() 方法进行转换。
反过来,如果想要通过指定格式的文本获取 Date 对象也可以通过 SimpleDateFormat 类来实现:
在创建 SimpleDateFormat 对象时需要指定格式,比如“yyyy”之类的,这些其实是 SimpleDateFormat 内置支持的格式编码,都是可以直接使用的,常用的格式编码如下表所示。
下面是这些格式编码的使用示例,大家可以根据输出去理解,也可以自己修改程序并查看输出结果。
可以通过两种方式来创建 Date 对象,以下是两种构造方法:
- Date():无参的构造方法,默认用当前日期和时间来初始化 Date 对象。
- Date(long date):需要传入一个长整型参数,该参数表示从 1970 年 1 月 1 日 0 时 0 分 0 秒开始所经过的毫秒数。
下面的程序演示了这两种构造方法创建 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 类的常用方法如下表所示,主要用于时间前后的判断以及获取时间对应的毫秒值:
方法名 | 描述 |
---|---|
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 对象转换成指定格式的文本,通常我们需要在创建 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周