【问题标题】:DST hour from local timezone DB using JDK8使用 JDK8 的本地时区数据库的 DST 小时
【发布时间】:2017-03-10 16:33:54
【问题描述】:

我正在使用 JDK8 zonedatetime 来获取 DST 规则,例如:

ZoneId zoneIdTmp = ZoneId.of("America/New_York");
ZoneRules rules = zoneId.getRules();
ZoneOffsetTransition nextTransition = rules.nextTransition(Instant.now());

我得到的输出如下:

2016-11-06T01:00-05:00[America/New_York]

DST 于 11 月 6 日凌晨 2 点(回到凌晨 1 点)切换。我假设上面输出中的凌晨 1:00 时间指向 DST 更改后的新时间,而 5:00 指向与 UTC 的新偏移量。我已经检查了我的本地时区数据库

zdump -v /usr/share/zoneinfo/America/New_York

那里的输出显示(大约)凌晨 2 点的时间

Sun Nov  6 05:59:59 2016 UT = Sun Nov  6 01:59:59 2016 EDT isdst=1 gmtoff=-14400

我自己没有从 JDK 输出中添加任何逻辑,有没有办法让我从 ZoneDateTime 获取凌晨 2 点时间(或跨不同区域 ID 工作的可靠工作逻辑)。

【问题讨论】:

    标签: java time java-8 dst


    【解决方案1】:

    你是如何输出规则的?使用 toString()?如果你使用 getter,就会有各种各样的信息看起来像你想要的,尤其是 ZoneOffsetTransition.getOffsetBefore()getOffsetAfter()getInstant()getDateTimeAfter() 的组合。

    【讨论】:

    • 感谢它是 toString() 输出 (System.out.println) 以查看我有什么值
    【解决方案2】:

    我使用以下方法获取所需的信息,使用 ZoneOffsetTransition 的 getDateTimeBefore() 方法来获取 DST 的转换时间。下一个 ZoneOffsetTransition 的 America/New_York 的输出复制如下,这就是我要寻找的:

    2016-11-06T02:00
    

    【讨论】:

      猜你喜欢
      • 2017-01-26
      • 1970-01-01
      • 2016-05-22
      • 2019-07-03
      • 2021-09-29
      • 2011-10-23
      • 2019-05-06
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多