为什么 java.time.Clock 有区域信息?备用时钟行为
为什么有区域信息?从时钟中,您只能在调用方法时获得 - 这是一个没有区域信息的时间。java.time.Clock
Instant
instant()
在时钟中提供区域的唯一目的是创建像这样的ZonedDateTime吗?ZonedDateTime.ofInstant(clock().instant(), clock().getZone())
那么在时钟类中有一个方法不是有意义吗?zonedDateTime()
为什么有区域信息?从时钟中,您只能在调用方法时获得 - 这是一个没有区域信息的时间。java.time.Clock
Instant
instant()
在时钟中提供区域的唯一目的是创建像这样的ZonedDateTime吗?ZonedDateTime.ofInstant(clock().instant(), clock().getZone())
那么在时钟类中有一个方法不是有意义吗?zonedDateTime()
引用时钟
文档(强调我的):
时钟的使用是可选的。所有关键日期时间类还具有 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
zonedDateTime
ZonedDateTime.now(Clock)
JewishDate
jewishDate
Clock
JewishDate
JewishDate.now(Clock)