哪个 `Clock` 实现是 java.time 中的默认实现?

Bas*_*que 5 java clock java-time

Java 8 及更高版本中内置的java.time框架包含Clock该类。这个类提供了一些对测试我们的日期时间处理代码有用的变体。

Instant.now( Clock.fixed?( myInstant , myZoneId ) )
Run Code Online (Sandbox Code Playgroud)

哪个Clock实例表示在java.time调用中隐式使用的默认值,其中我们没有指定Clock?

Instant.now()
Run Code Online (Sandbox Code Playgroud)

我想默认是:

……但文档没有说明是哪个。

在进行单元测试时,有时我们需要一个行为改变的时钟。但是当我们想显式传递一个Clock提供默认行为的对象时,我们使用什么?

And*_*eas 7

Instant.now()1 的源代码,如果您使用 IDE 2,您可以很容易地找到它:

public static Instant now() {
    return Clock.systemUTC().instant();
}
Run Code Online (Sandbox Code Playgroud)

1) 从 OpenJDK 14 复制
2) 例如在 Eclipse 中,您将光标放在上面now()并按 F3 以查看源代码。

保证所有兼容的 Java 版本都会这样做,因为它是为该方法定义的契约的一部分,即它在以下的 javadoc 中有这样的记录now()

这将查询系统 UTC 时钟以获取当前时刻。

该链接指向Clock.systemUTC().

  • 所询问的方法对于“Instant.now()”的答案是正确的。从更广泛的角度来看,其他一些类使用“systemDefaultZone()”。例如,无参数 `ZonedDateTime.now()` 被实现为 `return now(Clock.systemDefaultZone());`。 (2认同)