为什么java.time.Clock
有区域信息?从Clock,您只能在调用instant()
方法时获得Instant
,这是一个没有区域信息的时间。
唯一的目的是让时钟中的区域可用,例如创建这样的ZonedDateTime吗?ZonedDateTime.ofInstant(clock().instant(), clock().getZone())
那么在Clock类中有一个方法zonedDateTime()
难道没有意义吗?
交替时钟行为
引用Clock
文件(重点挖掘(:
时钟的使用是可选的。所有关键日期-时间类都有一个now((工厂方法,该方法使用默认时区中的系统时钟此抽象的主要目的是允许在需要时插入备用时钟。应用程序使用对象来获取当前时间,而不是静态方法。这可以简化测试。
例如,Clock.fixed( Instant fixedInstant, ZoneId zone )
总是将当前时刻报告为特定时刻,即固定(不变(的时间点。
我想回答你的问题需要一些读心术或猜测,但还是让我试试吧。据我所见,当使用任何采用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)
方法。