java 8 time api - Instant.now(clock)vs LocaldateTime.now(clock)

时间:2015-06-27 17:00:45

标签: java datetime time java-8 java.time.instant

用于以下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)没有这样做。

为什么这样设计?在这两种情况下,我们不期望得到相同的结果吗?

1 个答案:

答案 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(时钟)都将返回常量值。接受时钟作为参数的要点是能够控制参考时间或时钟分辨率等事项。