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 日)切换一个小时,但塔那那利佛不会。
在我的 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 日)切换一个小时,但塔那那利佛不会。