📅  最后修改于: 2023-12-03 15:32:04.604000             🧑  作者: Mango
Java中的.time.Clock类提供了一种简单的方式来获取当前时间,并且可以使用不同的时区来获取时间。.Clock类是一个抽象类,由三个具体的子类实现:
Clock.systemDefaultZone()
:使用默认时区来创建一个SystemClock对象Clock.systemUTC()
:使用UTC时区来创建一个SystemClock对象Clock.system(ZoneId)
:使用指定的时区来创建一个SystemClock对象Clock.tick(Clock, Duration)
:使用提供的Clock和持续时间来创建一个TickClock对象Clock.fixed(Instant, ZoneId)
:使用指定的时间和时区来创建一个FixedClock对象instant()
:获取当前时间的Instant对象millis()
:获取当前时间的毫秒数ZoneId getZone()
:获取时钟的时区信息ZoneOffset getOffset(Instant)
:获取指定时间的偏移量boolean isBefore(Instant)
:判断当前时间是否在指定时间之前boolean isAfter(Instant)
:判断当前时间是否在指定时间之后boolean isEqual(Instant)
:判断当前时间是否与指定时间相等Instant instant()
:获取当前时间的Instant对象ZonedDateTime zonedDateTime()
:获取当前时间的ZonedDateTime对象。如果时钟是FixedClock,则返回的ZonedDateTime对象的时区信息和Clock的时区信息相同;如果时钟是SystemClock或TickClock,则返回的ZonedDateTime对象的时区信息与当前系统时区相同。LocalDateTime localDateTime()
:获取当前时间的LocalDateTime对象。如果时钟是FixedClock,则返回的LocalDateTime对象的时区信息和Clock的时区信息相同;如果时钟是SystemClock或TickClock,则返回的LocalDateTime对象的时区信息为默认时区。import java.time.*;
public class ClockExample {
public static void main(String[] args) {
Clock systemClock = Clock.systemDefaultZone();
System.out.println("Current time in system default zone: " + systemClock.instant());
Clock utcClock = Clock.systemUTC();
System.out.println("Current time in UTC zone: " + utcClock.instant());
Clock shanghaiClock = Clock.system(ZoneId.of("Asia/Shanghai"));
System.out.println("Current time in Shanghai: " + shanghaiClock.instant());
Clock tickClock = Clock.tick(systemClock, Duration.ofSeconds(1));
System.out.println("Current time in tick clock: " + tickClock.instant());
Instant fixedInstant = Instant.parse("2022-01-01T00:00:00Z");
Clock fixedClock = Clock.fixed(fixedInstant, ZoneId.systemDefault());
System.out.println("Fixed time clock: " + fixedClock.instant());
}
}
这段代码展示了Clock类的示例用法,创建了不同类型的时钟对象,并输出了当前时间。其中,可以通过指定时区来获取时间,也可以使用系统默认时区。另外,通过指定一个持续时间的ticker,可以创建一个每秒钟更新一次的TickClock对象。最后,演示了如何使用FixedClock来输出指定的时间点。