11

对于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)

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

4

1 回答 1

9

更新: Instant 与时区意义上的 UTC 无关。它仅作为时间标准与 UTC 相关。

主要区别在于返回类型。它们具有不同的字符串表示形式,因为类型本身具有非常不同的含义。

Instant#now(Clock)返回InstantInstant“时间线上的[a]n 个瞬时点” 。

LocalDate#now(Clock)返回LocalDate。LocalTime是“在挂钟上看到的本地时间的描述”

结果Instant#now(Clock)LocalDate#now(Clock)意味着非常不同的事情,自然会有不同的结果。他们最大的共同点就是名字。方法名称是灰尘。请参阅类型。

在固定的Clock上,Instant.now(clock)LocalDate.now(clock)都将返回常量值。接受Clock作为参数的目的是能够控制诸如参考时间或时钟分辨率之类的东西。

于 2015-06-27T17:08:58.020 回答