使用 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
我正在使用 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