Java Clock类– java.time.Clock
Java Clock类是Date Time API的一部分。
Java Clock类用于获取带有时区的当前实例,日期和时间。
Java Clock类
Java Clock类位于
java.time
包中。Java Clock是一个抽象类,因此我们无法实例化它。
但是,它包含几种获取实例的静态方法。Java Clock类的用法是可选的,因为大多数Date API类都具有
now()
方法。
它的主要目的是允许在需要时插入备用时钟。
例如在Spring Dependency Injection中。
最佳实践是将Clock作为参数传递给需要当前时刻的方法。
可以使用时钟代替" System.currentTimeMillis()"和" TimeZone.getDefault()"。
Java提供了Clock的四种实现-" FixedClock"," OffsetClock"," SystemClock"和" TickClock"。
它们是Clock类的一部分,并且有静态方法返回这些Clock实现。
Java Clock方法
让我们看一下Clock类的静态方法及其用法。
systemDefaultZone()
Clock systemDefaultZone()方法返回带有系统默认时区的Clock实例。
public class MySpringBean { @Autowired private Clock clock; }
瞬间()
此方法返回时钟的当前时刻。
Clock clock = Clock.systemDefaultZone(); System.out.println(clock.getZone()); //prints "Asia/Kolkata" for me
systemUTC()
此方法返回带有UTC时区的Clock实例。
Instant instant = clock.instant(); System.out.println(instant); //prints "2016-05-08T17:51:09.102302Z"
系统(ZoneId区域)
此方法用于获取具有指定时区的Clock实例。
clock = Clock.systemUTC(); System.out.println(clock.getZone()); //prints "Z"
millis()
此方法返回实例的当前毫秒数。
等同于" System.currentTimeMillis()"。
Clock clock = Clock.system(ZoneId.of("Europe/Paris")); System.out.println(clock.instant()); //prints "2016-05-08T17:51:09.116133Z"
offset(Clock baseClock,持续时间offsetDuration)
此方法用于获取将实例添加到给定基本时钟的Clock。
我们可以使用它来模拟将来和过去的时间测试。
System.out.println(clock.millis()); //prints 1525801869116 System.out.println(System.currentTimeMillis()); //prints 1525801869116
tick(时钟baseClock,持续时间tickDuration)
此方法返回Clock,该Clock返回从指定的基本时钟截断到指定持续时间的最接近值的瞬间。
让我们用示例代码片段来查看它的用法。
Clock pastClock = Clock.offset(clock, Duration.ofMillis(-10000)); System.out.println(clock.millis() - pastClock.millis()); //prints 10000 Clock futureClock = Clock.offset(clock, Duration.ofDays(1)); System.out.println(futureClock.millis() - clock.millis()); //prints 86400000
上面的代码片段的输出:
Clock nearestHourClock = Clock.tick(clock, Duration.ofHours(1)); System.out.println(clock.instant()); System.out.println(nearestHourClock.instant()); Clock nearestSecondClock = Clock.tickSeconds(ZoneId.systemDefault()); System.out.println(nearestSecondClock); System.out.println(nearestSecondClock.instant());
注意" TickClock"和" SystemClock"实例的用法。
固定(即时fixedInstant,ZoneId区域)
此方法返回一个Clock,该Clock始终返回同一时刻。
2016-05-08T17:51:09.116566Z 2016-05-08T17:00:00Z TickClock[SystemClock[Asia/Kolkata],PT1S] 2016-05-08T17:51:09Z
输出:
Clock fixedClock = Clock.fixed(instant, ZoneId.systemDefault()); System.out.println(fixedClock); System.out.println(fixedClock.instant()); Thread.sleep(1000); System.out.println(fixedClock.instant());