如果给定LocalTime
中的ZoneId
,我怎样才能在LocalTime
找到经过调整的UTC
?
我正在寻找与.atZone
LocalDateTime
类似的内容,但无法找到任何内容。
我怀疑我可以将其与atOffset
一起使用,但我真的不懂如何使用它。
例如:
LocalTime: 15:00
ZoneId: America/Sao_Paulo (GMT -3)
Output: 18:00
答案 0 :(得分:5)
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
答案 1 :(得分:5)
你也需要约会。例如,如果区域有夏令时(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