【发布时间】:2019-03-26 12:05:56
【问题描述】:
自昨天(2018 年 10 月 21 日)以来,我一直在使用 Java 时区遇到一些问题。看起来 java 正在考虑在巴西实行夏令时,但它没有。
我创建了以下测试以确保
public static void main(String[] args) {
ZonedDateTime dateTime = LocalDateTime.now().atZone(ZoneId.systemDefault());
System.out.println(dateTime);
ZonedDateTime saoPaulo = dateTime.withZoneSameInstant(ZoneId.of("America/Sao_Paulo"));
ZonedDateTime cuiba = dateTime.withZoneSameInstant(ZoneId.of("America/Cuiaba"));
ZonedDateTime rightTime = dateTime.withZoneSameInstant(ZoneId.of("GMT-4"));
System.out.println(saoPaulo);
System.out.println(cuiba);
System.out.println(rightTime);
}
这给出了以下输出
2018-10-22T09:55:34.473-02:00[America/Sao_Paulo]
2018-10-22T09:55:34.473-02:00[America/Sao_Paulo]
2018-10-22T08:55:34.473-03:00[America/Cuiaba]
2018-10-22T07:55:34.473-04:00[GMT-04:00]
这是错误的,因为当前到圣保罗的时区应该是 -03 而 America/Cuiaba 应该是 -04
有谁知道Java时区信息的来源是什么?我可以做些什么来解决这个问题?我知道我可以通过设置固定的 GMT 偏移量来修复它,但我不喜欢它。
【问题讨论】:
-
查看oracle.com/technetwork/java/javase/tzdata-versions-138805.html(我们无法确定您拥有的 Java 版本等)
-
谢谢@JonSkeet。该链接确实帮助了我