为什么java.time.Clock
具有区域信息?在调用Instant
方法时,您只能从时钟获得intant()
,这是没有区域信息的时间。
唯一的目的是使时钟中的区域可用到例如创建像这样的ZonedDateTime吗?
ZonedDateTime.ofInstant(clock().instant(), clock().getZone())
然后在Clock类中使用方法zonedDateTime()
有意义吗?
答案 0 :(得分:4)
引用wait()
文档(重点是我的):
使用时钟是可选的。所有关键日期时间类还具有now()工厂方法,该方法在默认时区使用系统时钟。 此抽象的主要目的是允许在需要时插入备用时钟。应用程序使用对象而不是静态方法来获取当前时间。这样可以简化测试。
例如,Clock
始终将当前时刻报告为特定时刻,即固定(不变)的时间点。
答案 1 :(得分:2)
我想需要花点时间阅读或猜测才能回答您的问题,但是无论如何,让我尝试一下。据我所知,在使用带有Clock
参数的任何now
方法时,Clock
知道时区非常方便。如果Clock
无法提供时区,以下方法均无法正常工作:
LocalDate.now(Clock)
LocalDateTime.now(Clock)
LocalTime.now(Clock)
MonthDay.now(Clock)
OffsetDateTime.now(Clock)
OffsetTime.now(Clock)
Year.now(Clock)
YearMonth.now(Clock)
ZonedDateTime.now(Clock)
HijrahDate.now(Clock)
JapaneseDate.now(Clock)
MinguoDate.now(Clock)
ThaiBuddhistDate.now(Clock)
列表可能不完整。只有Instant.now(Clock)
不需要时区,而忽略Clock
的时区。
是的,Clock
使用zonedDateTime
方法提供与ZonedDateTime.now(Clock)
相同结果的替代设计也很有意义。但是:例如,某个想开发JewishDate
类的人将永远无法在jewishDate
类中插入Clock
方法。通过现有的设计,他们可以按照与现有日期和时间类完全相同的方式来设计其JewishDate
类,包括一种JewishDate.now(Clock)
方法。