Java - 如何将时区转换为不同的格式?

Java - how to convert time zones to a different format?

在我的 Java 代码中,我的约会有与每个约会相关的时区。

时区格式如下:

Europe/Zurich,
Indian/Antananarivo

我想将它们转换成不同的格式。我怎样才能将这些时区转换成例如:

GMT
EST

您可以使用 java.time.ZoneId 来解析它们并显示一些相应的短名称:

public static void main(String[] args) throws Exception {
    // example String zones
    String zuerich = "Europe/Zurich";
    String antananarivo = "Indian/Antananarivo";
    // create ZoneIds from the Strings
    ZoneId zueri = ZoneId.of(zuerich);
    ZoneId antan = ZoneId.of(antananarivo);
    // print their short names / abbreviations
    System.out.println(zueri.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));
    System.out.println(antan.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));
}

输出:

CET
EAT

注意这个CET可能不太正确,因为它现在是CEST

编辑

如果考虑到一些瞬间,您可以使用 GMT 表示:

public static void main(String[] args) throws Exception {
    // example String zones
    String zuerich = "Europe/Zurich";
    String antananarivo = "Indian/Antananarivo";
    // create ZoneIds from the Strings
    ZoneId zueri = ZoneId.of(zuerich);
    ZoneId antan = ZoneId.of(antananarivo);
    // create a formatter that outputs the GMT+/-XX:XX representations
    DateTimeFormatter gmtFormatter = DateTimeFormatter.ofPattern("OOOO");
    // or take "now" as a temporal reference and print the GMT representation per zone
    ZonedDateTime nowInZurich = ZonedDateTime.now(zueri);
    ZonedDateTime nowInAntananarivo = ZonedDateTime.now(antan);
    System.out.println(nowInZurich.format(gmtFormatter));
    System.out.println(nowInAntananarivo.format(gmtFormatter));
    // find out about the difference when the time switches from daylight saving
    ZonedDateTime sixMonthsLaterInZurich = nowInZurich.plusMonths(6);
    ZonedDateTime sixMonthsLaterInAntananarivo = nowInAntananarivo.plusMonths(6);
    System.out.println(sixMonthsLaterInZurich.format(gmtFormatter));
    System.out.println(sixMonthsLaterInAntananarivo.format(gmtFormatter));
}

打印

GMT+02:00
GMT+03:00
GMT+01:00
GMT+03:00

苏黎世似乎会在六个月后(2021 年 7 月 16 日)切换一个小时,但塔那那利佛不会。