使用 java.time 确定一天中的小时数

Determine number of hours in a day using java.time

我想知道一天中 DST(夏令时,夏令时)开始和结束的小时数。

我愿意使用 java.time。区域 ID 为 Europe/London。主要意图是:

我有一个纪元值,我应该从中找到小时数。怎么可能?

    ZoneId zone = ZoneId.of("Europe/London");
    long epochMillis = 1_540_700_000_000L;
    LocalDate date = Instant.ofEpochMilli(epochMillis)
            .atZone(zone)
            .toLocalDate();
    int hoursInDay = (int) ChronoUnit.HOURS.between(
            date.atStartOfDay(zone),
            date.plusDays(1).atStartOfDay(zone));
    System.out.println(date + " is " + hoursInDay + " hours");

我没有随机选择自纪元以来的毫秒数。在这种情况下,输出为:

2018-10-28 is 25 hours

将在 10 月的最后一个星期日,今年的 10 月 28 日过渡到标准时间。

Australia/Lord_Howe 时区使用 30 分钟 DST 转换,因此在该时区中,一天将是 23.5 小时或 24.5 小时,在上面将被截断为 23 和 24。但是对于在那些疯狂的英国政客决定做类似的事情之前,伦敦你应该没事。 :-)