Java Clock类使用示例教程

x33g5p2x  于2021-08-22 转载在 Java  
字(3.7k)|赞(0)|评价(0)|浏览(694)

本文是《Java日期时间API教程》系列。 在这篇文章中,我们将讨论Java Clock 类中java. time package的重要方法或API。

Java 8中增加了Clock类,它提供了对使用最佳可用系统Clock的瞬间时间的访问,并被用作时间提供者,可以为测试目的有效地存根。
这个类的实例被用来寻找当前的瞬间,它可以使用存储的时区来解释,从而找到当前的日期和时间。因此,可以用一个Clock来代替System.currentTimeMillis()TimeZone.getDefault()

###Clock类

JavaClock类方法/API与实例

让我们通过实例来探讨几个重要和常用的Clock方法。

instant()

该方法用于获取Clock的当前时刻

Clock clock = Clock.systemDefaultZone();
Clock clock1 = Clock.systemUTC();
System.out.println("Clock 1 Instant: " + clock.instant());
System.out.println("Clock 2 Instant: " + clock1.instant());

输出:

Clock 1 Instant: 2018-12-22T07:20:26.681Z
Clock 2 Instant: 2018-12-22T07:20:26.704Z

fixed()

该方法返回一个总是返回同一时刻的Clock。这个方法的主要用例是在测试中,固定的Clock确保测试不依赖于当前的Clock。

Clock clock = Clock.fixed(Instant.ofEpochSecond(3600), ZoneId.systemDefault());
Clock clock1 = Clock.fixed(Instant.ofEpochSecond(3600), ZoneId.systemDefault());

System.out.println("Clock 1: " + clock.toString());
System.out.println("Clock 2: " + clock1.toString());

输出:

Clock 1: FixedClock[1970-01-01T01:00:00Z,Asia/Calcutta]
Clock 2: FixedClock[1970-01-01T01:00:00Z,Asia/Calcutta]

withZone()

该方法返回一个具有不同时区的该Clock的副本。

例子。下面的例子演示了withZone()方法在默认区域的用法。

Clock clock = Clock.systemUTC();
Clock clock1 = clock.withZone(ZoneId.systemDefault());
System.out.println("Clock : " + clock.instant());
System.out.println("Clock1 : " + clock1.instant());

输出。

Clock : 2018-12-22T07:06:19.348Z
Clock1 : 2018-12-22T07:06:19.370Z

tickSeconds()

这个静态方法返回给定时区的当前即时滴答声,单位为整秒。这个Clock的纳秒字段将始终被设置为零。

Clock clock = Clock.systemDefaultZone();
Clock clock1 = Clock.tickSeconds(ZoneId.systemDefault());
System.out.println("Clock : " + clock.instant());
System.out.println("Clock1 : " + clock1.instant());

输出:

Clock : 2018-12-22T07:08:50.202Z
Clock1 : 2018-12-22T07:08:50Z

tickMinutes()

该方法用于获得一个Clock,该Clock使用最好的系统Clock,以整分钟为单位返回当前的即时滴答声。

例子。

Clock clock = Clock.systemDefaultZone();
Clock clock1 = Clock.tickMinutes(ZoneId.systemDefault());
System.out.println("Clock : " + clock.instant());
System.out.println("Clock1 : " + clock1.instant());

输出。

Clock : 2018-12-22T07:11:18.229Z
Clock1 : 2018-12-22T07:11:00Z

tick()

这个静态方法返回从指定Clock四舍五入到最近的指定持续时间的实例。指定的Clock持续时间必须是正数。

Clock clock = Clock.systemUTC();

Duration tickDuration = Duration.ofNanos(250000);
Clock clock1 = Clock.tick(clock, tickDuration);
System.out.println("Clock : " + clock.instant());
System.out.println("Clock1 : " + clock1.instant());

输出:

Clock : 2018-12-22T07:11:52.714Z
Clock1 : 2018-12-22T07:11:52.819Z

systemUTC()

该方法返回一个Clock对象,代表UTC区的当前时刻。

Clock clock = Clock.systemUTC();
System.out.println("Clock : " + clock.instant());

输出:

Clock : 2018-12-22T07:14:04.040Z

systemDefaultZone()

该静态方法返回一个代表当前时刻的Clock对象,并使用它所运行的系统的默认时区。

Clock clock = Clock.systemDefaultZone();
System.out.println("Clock : " + clock.toString());

输出:

Clock : SystemClock[Asia/Calcutta]

system()

获取一个Clock,使用最佳可用的系统Clock返回当前时刻。

Clock clock = Clock.system(ZoneId.systemDefault());
System.out.println("Clock : " + clock.instant());

输出:

Clock : 2018-12-22T07:17:37.418Z

offset()

获得一个Clock,从指定的Clock中返回瞬间,并加上指定的持续时间。

Clock clock = Clock.systemUTC();
Duration duration = Duration.ofHours(5);
Clock clock1 = Clock.offset(clock, duration);
System.out.println("Clock 1: " + clock.instant());
System.out.println("Clock 2: " + clock1.instant());

输出:

Clock 1: 2018-12-22T07:18:36.695Z
Clock 2: 2018-12-22T12:18:36.800Z

millis()

该方法用于获取Clock的当前毫秒瞬间。

Clock clock = Clock.systemDefaultZone();
Clock clock1 = Clock.systemUTC();
System.out.println("Clock 1 millis: " + clock.millis());
System.out.println("Clock 2 millis: " + clock1.millis());

输出:

Clock 1 millis: 1545463167415
Clock 2 millis: 1545463167415

getZone()

获取用于创建日期和时间的时区。

Clock clock = Clock.systemDefaultZone();
Clock clock1 = Clock.systemUTC();
System.out.println("Clock 1 Zone: " + clock.getZone());
System.out.println("Clock 2 Zone: " + clock1.getZone());

输出:

Clock 1 Zone: Asia/Calcutta
Clock 2 Zone: Z

相关文章