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

Jam*_*mes 6 java timezone jsr310 java-time

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

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

那么zonedDateTime()在Clock类中有一个方法会不会有意义呢?

Mar*_*sle 7

备用时钟行为

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

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

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

  • 你是对的。使用时钟的 ZoneDateTime 的 now() 实现如下所示: ` public static ZonedDateTime now(Clock clock) { return ofInstant(clock.instant(), clock.getZone()); }` (2认同)

Ole*_*.V. 6

我想需要一些读心或猜测才能回答你的问题,但无论如何让我尝试一下。据我所知,Clock在使用任何now带有Clock参数的方法时,了解时区都非常方便。Clock如果\xe2\x80\x99 无法提供时区,则以下方法都无法正常工作:

\n\n\n\n

该列表可能不完整。仅Instant.now(Clock)\xe2\x80\x99t 不需要时区并忽略Clock.

\n\n

是的,替代设计有Clock一种方法可以提供与本来有意义的zonedDateTime相同结果。ZonedDateTime.now(Clock)然而:想要开发一个类的人JewishDate永远无法将jewishDate方法插入到该类中Clock。利用现有的设计,他们可以JewishDate按照与现有日期和时间类完全相同的方式设计自己的类,包括方法JewishDate.now(Clock)

\n