我正在使用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的可靠工作逻辑)。
答案 0 :(得分:4)
你是如何输出规则的?使用toString()?如果您使用getter,那么所有类似的信息都与您的信息类似,尤其是ZoneOffsetTransition.getOffsetBefore()
和getOffsetAfter()
以及getInstant()
或getDateTimeAfter()
。
答案 1 :(得分:1)
我使用以下内容通过 ZoneOffsetTransition的getDateTimeBefore()方法获取所需信息,以获取DST的转换时间。来自下一个ZoneOffsetTransition的America / New_York的输出被复制到下面并且是我正在寻找的:
2016-11-06T02:00