java.time.Clock 中 ZoneId 的用途是什么?
What is a purpose of ZoneId in java.time.Clock?
我们可以从 Clock 创建 Instant。时钟有时区。
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 instant: 2022-01-21T18:36:21.848Z
Clock2 instant: 2022-01-21T18:36:21.848Z
那么在时钟中设置时区的目的是什么?
Instant
你说:
The output gives the same instant:
Instant
是在 UTC 中看到的时刻 ,即与 UTC 的偏移量为零 hours-minutes-seconds。所以你的代码没有使用你指定的时区。
ZonedDateTime
相反,尝试 ZonedDateTime
. This class does make use of the time zone. For example, calling ZonedDateTime.now()
captures the current moment as seen in the JVM’s current default time zone. Calling ZonedDateTime.now( myClock )
captures the current moment tracked by that Clock
对象,如通过 Clock
对象分配的时区所见。
System.out.println("Clock1 ZonedDateTime.now: " + ZonedDateTime.now( clock1 ) );
System.out.println("Clock2 ZonedDateTime.now: " + ZonedDateTime.now( clock2 ) );
看到这个 code run live at IdeOne.com. By the way, there we use the new time zone name 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]
用于测试
你问过:
So what is a purpose of having a timezone in Clock?
此功能对 testing 很有用,我们需要创建一个具有特定时区的已知场景,而不是使用 JVM 的实际默认时区。
我们可以从 Clock 创建 Instant。时钟有时区。
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 instant: 2022-01-21T18:36:21.848Z
Clock2 instant: 2022-01-21T18:36:21.848Z
那么在时钟中设置时区的目的是什么?
Instant
你说:
The output gives the same instant:
Instant
是在 UTC 中看到的时刻 ,即与 UTC 的偏移量为零 hours-minutes-seconds。所以你的代码没有使用你指定的时区。
ZonedDateTime
相反,尝试 ZonedDateTime
. This class does make use of the time zone. For example, calling ZonedDateTime.now()
captures the current moment as seen in the JVM’s current default time zone. Calling ZonedDateTime.now( myClock )
captures the current moment tracked by that Clock
对象,如通过 Clock
对象分配的时区所见。
System.out.println("Clock1 ZonedDateTime.now: " + ZonedDateTime.now( clock1 ) );
System.out.println("Clock2 ZonedDateTime.now: " + ZonedDateTime.now( clock2 ) );
看到这个 code run live at IdeOne.com. By the way, there we use the new time zone name 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]
用于测试
你问过:
So what is a purpose of having a timezone in Clock?
此功能对 testing 很有用,我们需要创建一个具有特定时区的已知场景,而不是使用 JVM 的实际默认时区。