【问题标题】:Determine number of hours in a day using java.time [closed]使用 java.time 确定一天中的小时数 [关闭]
【发布时间】:2019-01-04 03:42:05
【问题描述】:

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

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

  • 当 DST 在春季开始时,我们一天将有 ​​23 小时,因为时钟已经调快了
  • 相反,当 DST 结束时,我们将在一天内有 25 小时。

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

【问题讨论】:

  • 切换到 DST 时答案是 23,切换回来时答案是 25。剩下的问题是什么?
  • 我有一个纪元值,我应该从中找到小时数。这怎么可能?
  • 类似这样的东西:stackoverflow.com/questions/36130669/…?
  • 我从来没有看到关于这个问题的任何不清楚的地方。我希望我的编辑对那些做过的人有所帮助。

标签: java dst java-time


【解决方案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 日转换为标准时间。

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

【讨论】:

  • 谢谢。它真的很有帮助。 :)
  • 使用LocalDate(Time) 可能是一种更简单的指定日期的方法,以便您知道它是在夏令时更改日期。
  • @OleV.V.啊对。声明“// 这是 2018/10/28 UTC”可能更清楚,或者只是说“...”,而不是使用幻数。
  • 一旦我有机会尝试自己的代码@AndyTurner,我总是计划做类似的事情。感谢您启发了我最终的措辞。
猜你喜欢
  • 1970-01-01
  • 2013-08-16
  • 2017-06-03
  • 1970-01-01
  • 2021-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-21
相关资源
最近更新 更多