Java 时钟。固定区域的作用是什么
根据javadoc for,区域为: zone—用于将即时时间转换为日期时间的时区,不为空 但是我的代码似乎不受使用不同区域的影响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
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]
。您在哪里以及如何设置“美国/芝加哥”时区?