【发布时间】:2019-08-09 17:12:32
【问题描述】:
我对 LON 和 APAC 地区之间的时差感到困惑。使用英国夏令时,伦敦和新加坡之间的时差是 7 小时,如果没有夏令时,则为 8 小时。
但悉尼的时差是 9 小时(夏令时)和 11 小时(没有夏令时)。 所以我的问题是为什么 LON 和 SYD 之间有额外一小时的差异
我已经用下面的代码测试了这个,系统时区为伦敦
@Test
public void datetimetest(){
LocalDateTime dt1 = LocalDateTime.of(2019, 3, 19, 11, 0);
LocalDateTime dt2 = LocalDateTime.of(2019, 4, 19, 11, 0);
ZonedDateTime zonedDateTimeLon1 = dt1
.atZone(systemDefault())
.withZoneSameInstant(ZoneId.of("Europe/London"));
ZonedDateTime zonedDateTimeLon2 = dt2
.atZone(systemDefault())
.withZoneSameInstant(ZoneId.of("Europe/London"));
printZonedDateTime(zonedDateTimeLon1, "Europe/London");
printZonedDateTime(zonedDateTimeLon1, "Australia/Sydney");
printZonedDateTime(zonedDateTimeLon1, "Asia/Singapore");
printZonedDateTime(zonedDateTimeLon2, "Europe/London");
printZonedDateTime(zonedDateTimeLon2, "Australia/Sydney");
printZonedDateTime(zonedDateTimeLon2, "Asia/Singapore");
}
private static void printZonedDateTime(ZonedDateTime zonedDateTimeLon, String timeZone) {
LocalDateTime dateTime = zonedDateTimeLon
.withZoneSameInstant(ZoneId.of(timeZone))
.toLocalDateTime();
DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(timeZone + "= " + dateTimeFormatter.format(dateTime));
}
Result:
Europe/London= 2019-03-19 11:00:00
Australia/Sydney= 2019-03-19 22:00:00
Asia/Singapore= 2019-03-19 19:00:00
Europe/London= 2019-04-19 11:00:00
Australia/Sydney= 2019-04-19 20:00:00
Asia/Singapore= 2019-04-19 18:00:00
如结果所示,悉尼四月的时差为 9 小时。谁能解释一下这个
【问题讨论】:
标签: datetime java-8 dst timezone-offset localdate