Java 8 的日期、时间类

本文内容包括:

  1. date 类
  2. calender 类
  3. java 8 新增的日期、时间包

1. Date 类

Date 类提供了 6 个构造器,4 个已经不能使用,剩下两个如下:
Java 8 的日期、时间类
Date 对象的大部分方法也不能使用,只剩下为数不多的几个:
Java 8 的日期、时间类Java 8 的日期、时间类
下面程序示范了 Date 类的用法:
Java 8 的日期、时间类
总的来说,Date 类比较糟糕,尽量避免使用,如果要对时间进行处理,可使用 Calender 工具类。

2. Calender 工具类

Calender 是一个抽象类,用于表示日历。其本身不能直接实例化,程序只能创建 Calender 子类的实例。因此,具体使用中,可以创建自己的 Calender 子类,将它作为 Calender 对象使用(即多态)。

为统一计时,最通用的日历为: Gregorian Calender 。
Java 8 的日期、时间类
Calender 和 Date 都是表示日期的工具类,它们可以直接*转换:
Java 8 的日期、时间类
Calender 提供了大量访问、修改日期时间的方法,常用的如下:
Java 8 的日期、时间类
Java 8 的日期、时间类
上面很多方法都需要一个 int 类型的 field 参数,field 是 Calender 类的类变量,如Calender.YEAR、Calender.MONTH等,下面程序示范 Calender 类的常规用法:
Java 8 的日期、时间类
上面程序使用了静态导入,导入了Calender 类里的所有类变量,因此可以直接使用 YEAR、MONTH等变量。

Calender 有以下几个注意点:

  1. add 和 roll 的区别
    add用于改变Calender 的特定字段的值。
    add(int field,int amount)有如下两条规则:
    Java 8 的日期、时间类
    roll() 的规则与 add() 的处理规则不同,当被修饰的字段超出它允许的范围时,上一级字段不会增大。
    Java 8 的日期、时间类
    下面一段处理与 add() 类似:
    Java 8 的日期、时间类
  2. 设置Calender 的容错性
    调用Calender 对象的 set() 时,可能传入不合法的参数,比如 MONTH 传入 13,下面程序演示:
    Java 8 的日期、时间类
    Java 8 的日期、时间类
    即通过 setLenient() 设置了容错性。
    Calender 有两种解释日历字段的模式:lenient 模式和 non-lenient 模式:
    Java 8 的日期、时间类

3. set()方法修改延迟

Java 8 的日期、时间类
下面程序演示了 set() 方法延迟修改的效果:
Java 8 的日期、时间类
Java 8 的日期、时间类

3. Java 8 新增的日期、时间包

Java 8 新增了一个 java.time 包,包含如下常用类:
Java 8 的日期、时间类Java 8 的日期、时间类
下面程序示范这些类的用法:
Java 8 的日期、时间类
Java 8 的日期、时间类