Java 时钟。固定区域的作用是什么

Java 时钟。固定区域的作用是什么,java,Java,根据javadoc for,区域为: zone—用于将即时时间转换为日期时间的时区,不为空 但是我的代码似乎不受使用不同区域的影响 Clock mockClock = Clock.fixed(Instant.parse("2017-04-10T17:59:00Z"), ZoneId.of("UTC")); System.out.println("ZonedDateTime using clock "+ZonedDateTime.now(mockClo

根据javadoc for,区域为:

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

通常,使用静态方法之一检索
时钟
实例

Clock.system(ZoneId z)
Clock.systemDefaultZone()
Clock.systemUTC()
是返回当前时间的“运行”时钟。
时钟始终跟踪UTC,但也知道其时区,返回日期/时间值时使用该时区

如果仔细阅读Javadoc,您将看到
Clock.fixed()
返回一种未运行的特殊类型的时钟,即它总是设置为特定的瞬间,并且不随时间变化

ZonedDateTime.now(Clock Clock)
查询给定的时钟并返回为
时钟调整的当前时间

所以当你这么做的时候

Clock mockClock = Clock.fixed(Instant.parse("2017-04-10T17:59:00Z"), ZoneId.of("UTC"));
ZonedDateTime zdt = ZonedDateTime.now(mockClock);
发生以下情况:

  • 将创建一个特殊的“未运行”时钟,该时钟设置为您给定的日期/时间,时区规格为UTC
  • ZonedDateTime.now(mockClock)
    调用读取时钟的当前值(在您的情况下是固定的),并使用时钟值和UTC时区创建一个
    ZonedDateTime

  • 我想你可以试试Joda Time,我用Clock.fixed(Instant.parse(“2017-04-10T17:59:00Z”)、ZoneId.of(“America/Chicago”)
    测试了Joda Time,结果是
    2017-04-10T12:59-05:00[America/Chicago]
    。您在哪里以及如何设置“美国/芝加哥”时区?