你可以通过使用那些ZoneId和发布一个小例子 ZonedDateTime获取dayLightSaving日期
这将是我的荣幸。
ZoneId zone = ZoneId.of("America/New_York"); ZonedDateTime testTime = ZonedDateTime.of(2019, 3, 9, 0, 0, 0, 0, zone); boolean dst = zone.getRules().isDaylightSavings(testTime.toInstant()); System.out.println("Is the day in daylight saving " + dst);
是夏令时虚假的日子
如另一个答案中所述,夏季时间(DST)于今年3月10日上周日在北美开始。所以,让我们在凌晨5点尝试 - 然后我们应该得到 true 。
true
ZonedDateTime testTime = ZonedDateTime.of(2019, 3, 10, 5, 0, 0, 0, zone);
夏令时的日子是真的吗?
zone.getRules() 返回一个 ZoneRules 宾语。这样的对象知道关于时区的UTC偏移的一切,也关于DST。所以我们可以用它来查询它 Instant 。我们得到了 Instant 从 testTime.toInstant() 。
zone.getRules()
ZoneRules
Instant
testTime.toInstant()
的 链接: 强> 部分 时区和偏移类 在Oracle教程中(包括使用的示例) ZoneRules 这有点像我的)。
DST于2019年3月9日在美国东部地区没有生效。它于3月10日凌晨2点生效。 请参阅timeanddate.com 。
我的第一张照片显示夏令时从3月8日开始......
我猜你是基于这个:
STARTMODE = 3, startMonth = 2, 朝九特派= 8, startDayOfWeek = 1, STARTTIME = 7200000
请记住,DST的变化(至少在美国)总是在星期天早上发生。该规则所说的是,3月8日或之后的第一个星期日是应该发生的变化,而不是应该发生的变化 上 3月8日(周五)。法律规定,它从3月的第二个星期日开始(此刻,它会定期变化),所以在3月8日或之后的第一个星期日,该代码符合“3月的第二个星期日”的定义。
你可以在描述中看到这个概念 SimpleTimeZone :
SimpleTimeZone
要构建具有夏令时计划的SimpleTimeZone,可以使用一组规则,start-rule和end-rule来描述计划。夏令时开始或结束的日期由月份,日期和星期值的组合指定。月份值由Calendar MONTH字段值表示,例如Calendar.MARCH。星期几值由Calendar DAY_OF_WEEK值表示,例如SUNDAY。价值组合的含义如下。 的 一个月的确切日期 强> 要指定确切的某一天,请将月份和日期设置为精确值,将星期几设置为零。例如,要指定3月1日,请将月份设置为MARCH,将日期设置为1,将星期几设置为0。 的 星期几或星期几之后的星期几 强> 要在一个月的确切日期或之后指定星期几,请将月份设置为确切的月份值,将日期设置为应用规则的日期或之后的日期,将星期几设置为负数DAY_OF_WEEK字段值。例如,要指定4月的第二个星期日,请将月份设置为APRIL,将月份设置为8,将星期几设置为-SUNDAY。 的 星期几或星期几之前的星期几 强> 要在每月的确切日期或之前指定星期几,请将星期几和星期几设置为负值。例如,要指定3月21日或之前的最后一个星期三,请将月份设置为MARCH,将星期日设置为-21,将星期几设置为-WEDNESDAY。 的 一个月的最后一天 强> 要指定该月的最后一天,请将星期几设置为DAY_OF_WEEK值,将日期设置为-1。例如,要指定10月的最后一个星期日,请将月份设置为OCTOBER,将星期几设置为SUNDAY,将星期几设置为-1。
要构建具有夏令时计划的SimpleTimeZone,可以使用一组规则,start-rule和end-rule来描述计划。夏令时开始或结束的日期由月份,日期和星期值的组合指定。月份值由Calendar MONTH字段值表示,例如Calendar.MARCH。星期几值由Calendar DAY_OF_WEEK值表示,例如SUNDAY。价值组合的含义如下。