四. Date及其相关类

  • Java将1970年1月1日00:00:00定为基准时间,每个度量单位是毫秒(1秒的千分之一)。使用long整型变量来表示时间。从基准时间往前往后几亿年的时间都可以表示。
  • 可以使用以下的方法获得现在时刻的"时刻数值"。
long now = System.currentTimeMillis();

这个"时间数值"是所有时间类的核心,年月日都是根据这个"数值"计算出来的。

  • Date类:
    使用如下方法新建一个Date对象:
Date d1 = new Date();     //默认构造方法,新建的对象为调用时间
Date d2 = new Date(2000); //使用一个长整形

Date类的无参构造方法源码如下:

public Date() {
        this(System.currentTimeMillis());
    }

发现他也是调用了System.currentTimeMillis();这个方法,所以默认构造是当前时间。

date类的常用方法:

方法名

方法作用

after

测试该日期是否在指定日期之后

before

测试该日期是否在指定日期之前

getTime

返回从1970 01.01 00:00:00以来此Date对象的表示的毫秒数

toString

返回为对应格式的字符串

equals

比较两个日期是否相等

其中,before和after方法可以通过源码得知,他们也是借由比较时间数值来得到结果的,可以自己翻阅源码的相关内容。

其余Date类还有很多方法,但是多数方法已经被废弃了,不建议使用,有兴趣的可以翻阅源码或者JDK手册了解。

  • DateFormat类和SimpleDateFormat类
    DateFormat类的作用:把事件对象转化为指定格式的字符串。反之,把指定格式的字符串转化为时间对象。他是一个抽象类,一般使用它的子类SimpleDateFormat类来实现。
    构建格式化时间的字符遵循格式化字符的含义,他们的具体含义如下图:

通过如下的实例来了解他们的使用方法:

package konoha.commonClass.dateEtc;

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

public class ClassDateFormat {
    public static void main(String[] args) throws ParseException {

        //使用DateFormat抽象类的子类SimpleDateFormat格式化输出Date对象
        DateFormat df1 = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        Date date1 = new Date();
        String str1 = df1.format(date1);
        System.out.println(str1);

        //使用DateFormat抽象类的子类SimpleDateFormat格式化解析字符串构造Date对象
        DateFormat df2 = new SimpleDateFormat("yyyy年MM月dd日 hh时mm分ss秒");
        Date date2 = df2.parse("2020年12月31日  20时32分45秒");
        System.out.println(date2);

        //其他的一些使用方法
        //使用"D"格式符获取当前是这一年的第多少天
        DateFormat df3 = new SimpleDateFormat("D");
        System.out.println(df3.format(new Date()));
    }
}