LON 和 SYD 之间的时差为 9 小时,夏令时

Posted

技术标签:

【中文标题】LON 和 SYD 之间的时差为 9 小时,夏令时【英文标题】:Time difference between LON and SYD is 9 hours with daylight savings 【发布时间】: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 小时。谁能解释一下这个

【问题讨论】:

【参考方案1】:

今天(3 月 19 日)悉尼仍在使用夏令时 (DST)。南半球的夏季与北半球的冬季相吻合。所以它大约在这个时候结束。因此,虽然悉尼的标准时间是偏移 +10:00,但现在是 +11:00。伦敦目前是标准时间,+00:00。因此,正如您所观察到的,差异是 11 小时。

伦敦(和欧盟)的夏令时从 3 月 31 日开始,使伦敦时间偏移 +01:00,从而将时差减少到 10 小时。

夏季时间在 4 月 7 日在悉尼结束。它们返回到 +10:00 的标准偏移量,将伦敦和悉尼之间的时差进一步减少到 9 小时,即您在 4 月观察到的时差19.

或者在代码中:

    ZoneId london = ZoneId.of("Europe/London");
    ZoneId sydney = ZoneId.of("Australia/Sydney");
    Instant instMarch = Instant.parse("2019-03-19T00:00:00Z");
    Instant instApril = Instant.parse("2019-04-19T00:00:00Z");
    System.out.println(instMarch.atZone(london));
    System.out.println(instMarch.atZone(sydney));
    System.out.println(instApril.atZone(london));
    System.out.println(instApril.atZone(sydney));

输出是:

2019-03-19T00:00Z[Europe/London]
2019-03-19T11:00+11:00[Australia/Sydney]
2019-04-19T01:00+01:00[Europe/London]
2019-04-19T10:00+10:00[Australia/Sydney]

请注意当前的偏移量会被打印出来(第一行中的Z 表示偏移量为零)。

新加坡不使用夏令时(至少在 2019 年不使用),所以这里的差异仅从伦敦夏令时开始时的 8 小时减少到 7 小时。

【讨论】:

明白,谢谢解释。 YouTube 上的CPG Gray's Daylight Saving Time Explained 中描述了这个确切的场景(从 T03:50 开始)

以上是关于LON 和 SYD 之间的时差为 9 小时,夏令时的主要内容,如果未能解决你的问题,请参考以下文章

美国和中国的时差是多少?

1小时时差夏令时问题

时差问题

请问美国与中国时间时差多少?

中国与美国的时差怎么算?

中国和西班牙的时差是多少