用于以下java 8代码
1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone()));
2. System.out.println(Instant.now(Clock.systemDefaultZone()));
第1行打印当前时间通过添加偏移但第2行打印当前时间而不添加偏移量。
我检查了两者的源代码,发现LocaDateTime.now(clock)
通过添加偏移返回clock.instant()
返回时间,但Instant.now(clock)
没有这样做。
为什么这样设计?在这两种情况下,我们不期望得到相同的结果吗?
答案 0 :(得分:9)
更新:Instant在时区意义上与UTC无关。它仅与UTC作为时间标准有关。
主要区别在于返回类型。它们具有不同的字符串表示形式,因为类型本身具有非常不同的含义。
即时#now(时钟)返回即时。 即时为"[a]n instantaneous point on the time-line"。
LocalDate#now(时钟)返回 LocalDate 。 LocalTime 为"a description of the local time as seen on a wall clock"。
因此即时#现在(时钟)和 LocalDate#now(时钟)意味着非常不同的事情,自然会产生不同的结果。他们的共同点是一个名字。方法名称是灰尘。请参阅类型。
在固定的时钟上, Instant.now(时钟)和 LocalDate.now(时钟)都将返回常量值。接受时钟作为参数的要点是能够控制参考时间或时钟分辨率等事项。