根据 ZoneId 调整 LocalTime
Adjust LocalTime according to ZoneId
给定 ZoneId
中的 LocalTime
,如何在 UTC
上找到调整后的 LocalTime
?
我正在从 LocalDateTime
中寻找类似于 .atZone
的东西,但找不到任何东西。
我怀疑我可以将它与 atOffset
一起使用,但我真的不明白如何使用它。
例如:
LocalTime: 15:00
ZoneId: America/Sao_Paulo (GMT -3)
Output: 18:00
A ZoneId
没有意义,因为缺少日期,但您可以这样使用 ZoneOffset
:
LocalTime time = LocalTime.of(15, 0);
ZoneOffset offset = ZoneOffset.ofHours(-3);
LocalTime utc =
OffsetTime.of(time, offset).withOffsetSameInstant(ZoneOffset.UTC).toLocalTime();
System.out.println(utc); // 18:00
你也需要给出一个日期。例如,如果该区域有夏令时 (DST),则需要应用正确的偏移量(我不知道圣保罗是否使用夏令时,但 Java 始终需要日期)。
这仍然比您预期的多一步,但一旦您知道如何操作,它就足够简单了。对于演示的情况,我假设你的意思是 15:00 今天,你几乎没有这样做,但我相信你会自己填写所需的日期。
LocalTime time = LocalTime.of(15, 0);
LocalTime utcTime = LocalDateTime.of(LocalDate.now(), time)
.atZone(ZoneId.of("America/Sao_Paulo"))
.withZoneSameInstant(ZoneOffset.UTC)
.toLocalTime();
System.out.println(utcTime);
这会打印您也要求的结果
18:00
给定 ZoneId
中的 LocalTime
,如何在 UTC
上找到调整后的 LocalTime
?
我正在从 LocalDateTime
中寻找类似于 .atZone
的东西,但找不到任何东西。
我怀疑我可以将它与 atOffset
一起使用,但我真的不明白如何使用它。
例如:
LocalTime: 15:00
ZoneId: America/Sao_Paulo (GMT -3)
Output: 18:00
A ZoneId
没有意义,因为缺少日期,但您可以这样使用 ZoneOffset
:
LocalTime time = LocalTime.of(15, 0);
ZoneOffset offset = ZoneOffset.ofHours(-3);
LocalTime utc =
OffsetTime.of(time, offset).withOffsetSameInstant(ZoneOffset.UTC).toLocalTime();
System.out.println(utc); // 18:00
你也需要给出一个日期。例如,如果该区域有夏令时 (DST),则需要应用正确的偏移量(我不知道圣保罗是否使用夏令时,但 Java 始终需要日期)。
这仍然比您预期的多一步,但一旦您知道如何操作,它就足够简单了。对于演示的情况,我假设你的意思是 15:00 今天,你几乎没有这样做,但我相信你会自己填写所需的日期。
LocalTime time = LocalTime.of(15, 0);
LocalTime utcTime = LocalDateTime.of(LocalDate.now(), time)
.atZone(ZoneId.of("America/Sao_Paulo"))
.withZoneSameInstant(ZoneOffset.UTC)
.toLocalTime();
System.out.println(utcTime);
这会打印您也要求的结果
18:00