我们可以从时钟中创建即时。时钟有时区。
Clock clock1 = Clock.system(ZoneId.of("Europe/Paris"));
Clock clock2 = Clock.system(ZoneId.of("Asia/Calcutta"));
System.out.println("Clock1 instant: " + clock1.instant());
System.out.println("Clock2 instant: " + clock2.instant());输出提供了相同的瞬间:
Clock1即时通讯: 2022-01-21T18:36:21.848Z Clock2即时通讯: 2022-01-21T18:36:21.848Z
那么,在时钟中设置时区的目的是什么呢?
发布于 2022-01-22 15:27:51
Instant
你说过:
输出提供了相同的瞬间:
Instant是从UTC中看到的瞬间,也就是与UTC的零小时-分-秒的偏移。因此,您的代码不使用指定的时区。
ZonedDateTime
相反,请尝试ZonedDateTime。这个类确实使用了时区。例如,调用ZonedDateTime.now()可以捕获JVM当前默认时区中所显示的当前时刻。调用ZonedDateTime.now( myClock )捕获由该Clock对象跟踪的当前时刻,通过该Clock对象的指定时区可以看到这一点。
System.out.println("Clock1 ZonedDateTime.now: " + ZonedDateTime.now( clock1 ) );
System.out.println("Clock2 ZonedDateTime.now: " + ZonedDateTime.now( clock2 ) );看这个在IdeOne.com现场运行的代码。顺便说一下,我们使用的是新的时区名称Asia/Kolkata,而不是Asia/Calcutta。
注意一天中不同的时间,16:21和20:51。注意不同的时区。
Clock1 ZonedDateTime.now: 2022-01-22T16:21:26.490913+01:00[Europe/Paris]
Clock2 ZonedDateTime.now: 2022-01-22T20:51:26.492823+05:30[Asia/Kolkata]用于测试
你问:
那么,在时钟中设置时区的目的是什么呢?
这个功能对于测试很有用,我们需要创建一个特定时区的已知场景,而不是使用JVM的实际默认时区。
https://stackoverflow.com/questions/70806175
复制相似问题