【问题标题】:java 8 time api - Instant.now(clock) vs LocaldateTime.now(clock)java 8 time api - Instant.now(clock) vs LocaldateTime.now(clock)
【发布时间】:2015-09-14 11:22:22
【问题描述】:

对于java 8的以下代码

  1. System.out.println(LocalDateTime.now(Clock.systemDefaultZone())); 
  2. System.out.println(Instant.now(Clock.systemDefaultZone()));

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    Instant#now(Clock) 返回 Instant即时"[a]n instantaneous point on the time-line"

    LocalDate#now(Clock) 返回 LocalDateLocalTime"a description of the local time as seen on a wall clock"

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

    在固定的 Clock 上,Instant.now(clock)LocalDate.now(clock) 都将返回恒定值。接受 Clock 作为参数的目的是能够控制参考时间或时钟分辨率等内容。

    【讨论】:

    • 能否请您告诉我,传递时钟作为参数需要什么?
    • 时钟被允许作为一个参数来允许使用案例,如测试中的固定或偏移时钟或不同的分辨率,如所需的秒或分钟。 docs.oracle.com/javase/8/docs/api/java/time/Clock.html
    • @nantitv 我已经重写了我的答案。之前有点模糊。它现在有效地回答了您的问题吗?
    • 请给我一些时间来消化这个概念
    猜你喜欢
    • 1970-01-01
    • 2022-08-04
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 2011-11-12
    • 2014-10-18
    相关资源
    最近更新 更多