使用JDK8从本地时区DB获取DST小时

时间:2016-10-27 20:48:58

标签: java time java-8 dst

我正在使用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点指向DST更改后的新时间,并且5点指向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获得2am时间(或者是跨越不同区域ID的可靠工作逻辑)。

2 个答案:

答案 0 :(得分:4)

你是如何输出规则的?使用toString()?如果您使用getter,那么所有类似的信息都与您的信息类似,尤其是ZoneOffsetTransition.getOffsetBefore()getOffsetAfter()以及getInstant()getDateTimeAfter()

答案 1 :(得分:1)

我使用以下内容通过 ZoneOffsetTransition的getDateTimeBefore()方法获取所需信息,以获取DST的转换时间。来自下一个ZoneOffsetTransition的America / New_York的输出被复制到下面并且是我正在寻找的:

2016-11-06T02:00