根据Clock.fixed
的javadoc,区域是:
zone - 用于将即时转换为日期时间的时区,而不是空
但是我的代码似乎没有受到使用其他区域的影响。
Clock mockClock = Clock.fixed(Instant.parse("2017-04-10T17:59:00Z"),
ZoneId.of("UTC"));
System.out.println("ZonedDateTime using clock "+ZonedDateTime.now(mockClock));
在上面的代码中,无论我将时区设置为UTC还是America / Chicago,输出都是相同的:
ZonedDateTime using clock 2017-04-10T17:59Z[UTC]
如果它没有改变时区,zone
的作用是什么?
答案 0 :(得分:0)
通常,使用一种静态方法
检索Clock
实例
Clock.system(ZoneId z)
Clock.systemDefaultZone()
Clock.systemUTC()
是"正在运行"返回当前时间的时钟。 Clock
始终跟踪UTC,但也知道它在返回日期/时间值时使用的时区。
如果您仔细阅读Javadoc,您会看到Clock.fixed()
返回一个未运行的特殊类型的时钟,也就是说,它始终设置为特定的时刻,并且不会随时间变化。
ZonedDateTime.now(Clock clock)
查询给定时钟并返回为Clock
时区调整的当前时间。
所以当你这样做时
Clock mockClock = Clock.fixed(Instant.parse("2017-04-10T17:59:00Z"), ZoneId.of("UTC"));
ZonedDateTime zdt = ZonedDateTime.now(mockClock);
发生以下情况:
ZonedDateTime.now(mockClock)
调用读取时钟的当前值,在您的情况下是固定的,并创建一个ZonedDateTime
,其时钟值和UTC时区。