给定LocalTime中的ZoneId,如何在LocalTime上找到调整后的UTC

我正在从.atZone寻找类似于LocalDateTime的东西,但找不到任何东西。

我怀疑我可以将它与atOffset一起使用,但是我不太了解如何使用它。

因此,例如:

LocalTime: 15:00
ZoneId: America/Sao_Paulo (GMT -3)
Output: 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

关于java-8 - 根据ZoneId调整LocalTime,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44416075/

10-12 06:30