Java8 API 时间类Clock

Clock是带时区的时钟,内部支持4种方式获取4类Clock对象。

import java.time.Clock;
import java.time.Duration;

public class ClockTest {

    public static void main(String[] args) throws InterruptedException {

        //默认时钟
        Clock clock = Clock.systemDefaultZone();
        System.out.println(clock.getZone());
        System.out.println(clock.instant());
        System.out.println(clock.millis());

        //偏移时钟,调整指定时间间隔获取的时钟
        Clock offset = Clock.offset(clock, Duration.ofSeconds(1000));
        System.out.println(offset.instant());

        //滴答时钟
        //相当于自定义时钟刻度(间隔),每次获取的时间,都是指定时间间隔刻度的时间,在两个时间之间,离谁近,取谁
        Clock tick = Clock.tick(clock, Duration.ofSeconds(3));
        System.out.println("无休眠: "+tick.instant());
        System.out.println("无休眠: "+tick.instant());
        System.out.println("无休眠: "+tick.instant());
        Thread.sleep(1000);
        System.out.println("休眠1秒:"+tick.instant());
        Thread.sleep(1000);
        System.out.println("休眠2秒:"+tick.instant());
        Thread.sleep(1000);
        System.out.println("休眠3秒:"+tick.instant());
        Thread.sleep(1000);
        System.out.println("休眠4秒:"+tick.instant());
        Thread.sleep(1000);
        System.out.println("休眠5秒:"+tick.instant());

        //固定时间
        Clock fixed = Clock.fixed(clock.instant(), ZoneId.systemDefault());
        System.out.println("fixed:"+fixed);
    }
}

输出:

Asia/Shanghai
2021-07-06T08:33:14Z
1625560394014
offset:2021-07-06T08:49:54.014Z
无休眠: 2021-07-06T08:33:12Z
无休眠: 2021-07-06T08:33:12Z
无休眠: 2021-07-06T08:33:12Z
休眠1秒:2021-07-06T08:33:15Z
休眠2秒:2021-07-06T08:33:15Z
休眠3秒:2021-07-06T08:33:15Z
休眠4秒:2021-07-06T08:33:18Z
休眠5秒:2021-07-06T08:33:18Z
fixed:FixedClock[2021-07-06T08:33:19.015Z,Asia/Shanghai]