Clock.fixed区域的作用是什么

时间:2017-04-04 00:20:09

标签: java

根据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的作用是什么?

1 个答案:

答案 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);

发生以下情况:

  1. 一个特殊的"没有跑步"创建时钟,设置为您提供的日期/时间,时区规格为UTC。
  2. ZonedDateTime.now(mockClock)调用读取时钟的当前值,在您的情况下是固定的,并创建一个ZonedDateTime,其时钟值和UTC时区。