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

nan*_*itv 11 java time datetime java-8 java.time.instant

对于以下java 8代码

  1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 
  2. System.out.println(Instant.now(Clock.systemDefaultZone()));
Run Code Online (Sandbox Code Playgroud)

第1行打印当前时间通过添加偏移但第2行打印当前时间而不添加偏移量.

我检查了两者的源代码,发现通过添加偏移LocaDateTime.now(clock)返回clock.instant()返回时间但Instant.now(clock)没有这样做.

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

Ala*_*Dea 9

更新:Instant在时区意义上与UTC无关.它与UTC仅作为时间标准有关.

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

Instant#now(时钟)返回Instant.一个即时"关于时间线[A] n的瞬时点".

LocalDate#now(Clock)返回LocalDate.甲本地时间"处看到在墙上时钟的本地时间的描述".

因此,Instant#now(Clock)LocalDate#now(Clock)意味着非常不同的东西,自然会产生不同的结果.他们的共同点是一个名字.方法名称是灰尘.请参阅类型.

在固定时钟上,Instant.now(时钟)LocalDate.now(时钟)都将返回常量值.接受Clock作为参数的要点是能够控制参考时间或时钟分辨率等.

  • 允许时钟作为参数,以允许在测试中使用固定或偏移时钟等用例,或根据需要使用不同的分辨率,如秒或分钟.https://docs.oracle.com/javase/8/docs/api/java/time/Clock.html (2认同)