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

时间:2018-11-28 10:59:19

标签: java timezone java-time jsr310

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

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

然后在Clock类中使用方法zonedDateTime()有意义吗?

2 个答案:

答案 0 :(得分:4)

备用时钟行为

引用wait()文档(重点是我的):

  

使用时钟是可选的。所有关键日期时间类还具有now()工厂方法,该方法在默认时区使用系统时钟。 此抽象的主要目的是允许在需要时插入备用时钟。应用程序使用对象而不是静态方法来获取当前时间。这样可以简化测试。

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

答案 1 :(得分:2)

我想需要花点时间阅读或猜测才能回答您的问题,但是无论如何,让我尝试一下。据我所知,在使用带有Clock参数的任何now方法时,Clock知道时区非常方便。如果Clock无法提供时区,以下方法均无法正常工作:

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

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