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

时间:2018-07-27 04:26:56

标签: java dst java-time

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

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

  • 夏令时在春季开始的时候,一天将有23个小时,因为时钟会向前调
  • 相反,夏令时结束后,我们一天中将有25个小时。

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

1 个答案:

答案 0 :(得分:1)

    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是25小时

到标准时间的转换将发生在10月的最后一个星期日,即今年10月28日。

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