为什么 java.time.Clock 有区域信息?

Why does the java.time.Clock has zone information?

为什么java.time.Clock有区域信息?在时钟中,您只能在调用 instant() 方法时获得 Instant - 这是没有时区信息的时间。

是让时钟中的区域可用的唯一目的,例如像这样创建一个 ZonedDateTime? ZonedDateTime.ofInstant(clock().instant(), clock().getZone())

那么在时钟 class 中使用一个方法 zonedDateTime() 不是很有意义吗?

备用时钟行为

引用 Clock 文档(强调我的):

Use of a Clock is optional. All key date-time classes also have a now() factory method that uses the system clock in the default time zone. The primary purpose of this abstraction is to allow alternate clocks to be plugged in as and when required. Applications use an object to obtain the current time rather than a static method. This can simplify testing.

例如,Clock.fixed( Instant fixedInstant, ZoneId zone )始终将当前时刻报告为特定时刻,即固定(不变)的时间点。

我想回答您的问题需要一些读心术或猜测,但无论如何让我试一试。据我所知,在使用带有 Clock 参数的任何 now 方法时,知道时区的 Clock 非常方便。如果 Clock 无法提供时区,则以下方法中的 None 可以正常工作:

列表可能不完整。只有Instant.now(Clock)不需要时区,忽略Clock.

的时区

是的,Clock 有一个 zonedDateTime 方法提供与 ZonedDateTime.now(Clock) 相同结果的替代设计也很有意义。但是:有人想要开发 JewishDate class 永远无法将 jewishDate 方法插入到 Clock class 中。使用现有设计,他们可以按照与现有日期和时间 classes 完全相同的方式设计 JewishDate class,包括 JewishDate.now(Clock) 方法。