7.4 日期 时间类 7.4.1 Date类

7.4 日期 时间类

Java原本提供了DateCalendar用于处理日期、时间的类,包括创建日期、时间对象,获取系统当前日期、时间等操作。但Date不仅无法实现国际化,而且它对不同属性也使用了前后矛盾的偏移量,比如月份与小时都是从0开始的,月份中的天数则是从1开始的,年又是从1900开始的。
java util.Calendar则显得过于复杂,从下面介绍中会看到传统Java对日期、时间处理的不足。Java8吸取了Joda-Time库(一个被广泛使用的日期、时间库)的经验,提供了一套全新的日期时间库.

7.4.1 Date类

Java提供了Date类来处理日期、时间(此处的Date是指java.util包下的Date类,而不是java.sql包下的Date类),Date对象既包含日期,也包含时间。Date类从JDK1.0起就开始存在了,但正因为它历史悠久,所以它的大部分构造器、方法都已经过时,不再推荐使用了。

Date类还可以使用的构造器

Date类提供了6个构造器,其中4个已经Deprecated,也就是Java不再推荐使用了,剩下的两个构造器如下:

构造器 描述
Date() 生成一个代表当前日期时间的Date对象。该构造器在底层调用System.currentTimeMillis()获得long整数作为日期参数.
Date(long date) 根据指定的long型整数来生成一个Date对象。该构造器的参数表示创建的Date对象和GMT1970年1月1日00:00:00之间的时间差,以毫秒作为计时单位。

Date类中还可以使用的方法

Date构造器相同的是,Date对象的大部分方法也Deprecated了,剩下为数不多的几个方法:

方法 描述
boolean after(Date when) 测试该日期是否在指定日期when之后.
boolean before(Date when) 测试该日期是否在指定日期when之前。
long getTime() 返回该时间对应的long型整数,即从GMT1970-01-01 00:00:00到该Date对象之间的时间差,以毫秒作为计时单位。
void setTime(long time) 设置该Date对象的时间

Date实例

1
2
3
4
5
6
7
8
9
10
11
import java.util.Date;

public class DateTest {
public static void main(String[] args) {
Date date1 = new Date();
Date date2 = new Date(System.currentTimeMillis() + 100);
System.out.println(date2);
System.out.println(date1.compareTo(date2));
System.out.println(date2.after(date1));
}
}

运行结果

1
2
3
Fri Oct 04 20:36:19 CST 2019
-1
true

尽量少用Date类

总体来说,Date是一个设计相当糟糕的类,因此Java官方推荐尽量少用Date的构造器和方法。
如果需要对日期、时间进行加减运算,或获取指定时间的年、月、日、时、分、秒信息,可使用Calendar工具类