1 绝对时间

Wu Jun 2018-12-18 21:53:13
05 Java > 00 Java 基础 > 13 日期和时间

Java 8 新的 Date-Time API 吸取了 Joda-Time 的精髓,所有类不可修改。

新的 java.time 包涵盖了所有处理日期,时间,日期/时间,时区,时刻(Instant),过程(during)与时钟(clock)的操作。替换 Calendar 和 Date 类。

Java的 Date 和 Time API 规范要求 Java 时间尺度为:

1 Instants

Instant(时刻,时间点)表示时间线上的某个点,时间线的原点被设为“新纪元”——本初子午线的 1970 年 1 月 1 日午夜。

精确到纳秒,Instant.MIN 可追溯 10 亿年,Instant.MAX 是公元 10 亿年的 12 月 31 日。

当前时刻

Instant.now() 获取当前时刻,可做时间戳

2 Duration

Duration(时间区间)是两个时刻之间的时间量。

因为纳秒级别超出一个 long 型长度,秒数存在一个 long 中,纳秒数存在一个 int 中。

2.1 传统度量

可以使用 toNanos、toMillis、getSeconds、toMinutes、toHours 和 toDays 转换为传统时间度量单位。

2.2 时间差

between(start,end) 获取两时刻的时间差

Instant start = Instant.now();
runAlgorithm();
Instant end = Instant.now();
Duration timeElapsed = Duration.between(start, end);
long millis = timeElapsed.toMillis();

2.3 计算

如果要计算精确到纳秒级,需要整个 Duration 的存储内容

方法 描述
plus, minus 在当前 Instant 或 Duration 上加减一个 Duration
plus(Nanos,Millis,Seconds), minusXXX 在当前 Instant 或 Duration 上加减指定时间单位的数值
plus(Minutes,Hours,Days), minusXXX 当前 Duration 上加减指定时间单位的数值
multipliedBy, dividedBy, negated 当前 Duration 上乘、除、减去给的 long
isZero, isNegative 检查当前 Duration 是否 0 或负值