使用 JDK8 来自本地时区数据库的 DST 小时

DST hour from local timezone DB using JDK8

我正在使用 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 am 时间指向 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(或跨不同区域 ID 工作的可靠工作逻辑)获取凌晨 2 点的时间。

你是怎么输出规则的?使用 toString()?如果您使用吸气剂,那么会出现各种看起来像您所追求的信息,尤其是 ZoneOffsetTransition.getOffsetBefore()getOffsetAfter()getInstant()getDateTimeAfter().[=15= 的组合]

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

2016-11-06T02:00