Java Clock tick()方法及实例
java.time.Cl ock的 tick(Clock baseClock, Duration tickDuration) 方法是Clock类的一个静态方法,它返回一个时钟,该时钟 从基础时钟四舍五入到 参数中指定的持续时间的 最近出现的瞬间 。指定的基础时钟持续时间必须是正数,既不是负数也不是空数。时钟将按照给定的持续时间滴答作响,如果持续时间是分钟的一半或秒的一半或小时的一半,时钟将返回四舍五入到分钟的一半或秒的一半或小时的一半的实例,如持续时间所指定。
这个方法可以帮助定制时钟类,它根据持续时间来打勾。例如,一个滴答意味着如果提供了持续时间5秒,那么瞬间的第二部分将根据5秒四舍五入。如果基本时钟的第二部分是13,那么它将是10。四舍五入的时钟返回比基础时钟小的瞬间。
零或一纳秒的持续时间将对基础时钟方法没有影响。这些将返回相同的基础时钟。如果基础时钟是不可变的、线程安全的和可序列化的,那么返回的时钟也将是不可变的、线程安全的和可序列化的。
语法
public static Clock tick(Clock baseClock, Duration tickDuration)
参数: 该方法需要两个强制性参数。
- baseClock – 你想根据持续时间进行四舍五入的基础时钟。
- tickDuration – 四舍五入时钟的每个可见刻度的持续时间,不是负值,也不是空值。
返回值: 该方法返回一个使用默认区域的最佳可用系统时钟的时钟。
异常: 该方法会抛出以下异常。
- IllegalArgumentException – 如果持续时间是负的,或者有一个部分比整整一毫秒还要小 ,以至于整个持续时间不能被分割成一秒。
- ArithmeticException – 如果持续时间太大,不能用纳秒表示。
例子
代码:
Clock baseClock = Clock.systemDefaultZone();
Clock clock = Clock.tick(baseClock, Duration.ofSeconds(10));
解释: :
方法tick()返回每10秒后滴答的瞬间,意味着滴答的持续时间是10秒。
瞬间的实际时间是18:57:51.248Z,那么由于10秒的持续时间
它将四舍五入到18:57:50Z,同样,18:59:36.247Z到18:59:30Z。
以下程序说明了java.time.Clock类的tick()方法
程序1:当用systemDefaultZone()创建时钟时。
在下面的程序中,有三种情况,持续时间是30秒、10秒、3秒。所以tick()方法必须应用于这三种情况。
// Java program to demonstrate
// tick() method of Clock class
import java.time.*;
// create class
public class tickMethodDemo {
// Main method
public static void main(String[] args)
{
// create base Clock with systemDefaultZone() method
Clock baseclock = Clock.systemDefaultZone();
// get instant of the base class and print instant
Instant instant = baseclock.instant();
System.out.println("Instant of Base class " + instant);
// apply tick Method for Duration of 30sec and
// create clock1 and print instant of clock1
Clock clock1 = Clock.tick(baseclock, Duration.ofSeconds(30));
System.out.println("Instant of Clock1 " + clock1.instant());
// apply tick Method for Duration of 10sec and
// create clock2 and print instant of clock2
Clock clock2 = Clock.tick(baseclock, Duration.ofSeconds(10));
System.out.println("Instant of Clock2 " + clock2.instant());
// apply tick Method for Duration of 3sec and
// create clock3 and print instant of clock3
Clock clock3 = Clock.tick(baseclock, Duration.ofSeconds(3));
System.out.println("Instant of Clock3 " + clock3.instant());
}
}
输出:
Instant of Base class 2018-08-22T11:18:11.336Z
Instant of Clock1 2018-08-22T11:18:00Z
Instant of Clock2 2018-08-22T11:18:10Z
Instant of Clock3 2018-08-22T11:18:09Z
程序2:当持续时间为分钟、小时或天时,打印时钟的瞬间。
// Java program to demonstrate
// tick() method of Clock class
import java.time.*;
// create class
public class tickMethodDemo {
// Main method
public static void main(String[] args)
{
// create base Clock with systemUTC() method
Clock baseclock = Clock.systemUTC();
// get instant of the base class and print instant
Instant instant = baseclock.instant();
System.out.println("Instant of Base class "
+ instant);
// apply tick Method for Duration of 10 Minutes
Clock clock1 = Clock.tick(baseclock,
Duration.ofMinutes(10));
System.out.println("Instant of Clock1 when duration"
+ " = 10 minutes is "
+ clock1.instant());
// apply tick Method for Duration of 2 hours
Clock clock2 = Clock.tick(baseclock,
Duration.ofHours(2));
System.out.println("Instant of Clock2 when duration"
+ " = 2 hours is "
+ clock2.instant());
// apply tick Method for Duration of 5 days
Clock clock3 = Clock.tick(baseclock,
Duration.ofDays(5));
System.out.println("Instant of Clock2 when duration"
+ " = 5 days is "
+ clock3.instant());
}
}
输出:
Instant of Base class 2018-08-22T11:18:15.533Z
Instant of Clock1 when duration = 10 minutes is 2018-08-22T11:10:00Z
Instant of Clock2 when duration = 2 hours is 2018-08-22T10:00:00Z
Instant of Clock2 when duration = 5 days is 2018-08-22T00:00:00Z
参考资料:
https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html#tick-java.time.Clock-java.time.Duration-