我的第一张照片显示夏令时从3月8日开始,而要检查我是否已将自定义日期(3月9日)传递给timeZone.inDaylightTime(calendar.getTime()),而返回的是false。出问题了吗?
TimeZone timeZone = TimeZone.getTimeZone("US/Eastern");
System.out.println("TimeZone ::: "+timeZone);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.AM_PM, Calendar.AM);
calendar.set(Calendar.MONTH, Calendar.MARCH);
calendar.set(Calendar.DAY_OF_MONTH, 9);
calendar.set(Calendar.YEAR,2019);
boolean b = timeZone.inDaylightTime(calendar.getTime());
System.out.println("Is the day in daylight saving "+b);
答案 0 :(得分:2)
DST于2019年3月9日在美国东部地区未生效,于3月10日凌晨2点See timeanddate.com生效。
我的第一张照片显示夏令时从3月8日开始...
我猜你是基于此:
startMode = 3, startMonth = 2, startDay = 8, startDayOfWeek = 1, startTime = 7200000
请记住,夏令时更改(至少在美国是这样)总是在周日的早晨发生。该规则的意思是,应在3月8日或之后的第一个星期日发生更改,而不是应在3月8日(即星期五)发生。法律规定,该日期从3月的第二个星期日开始(目前定期更改),因此,通过说3月8日或之后的第一个星期日,该代码符合“ 3月的第二个星期日”的定义。
您可以在SimpleTimeZone
的说明中看到此概念:
要构建具有夏时制时间表的SimpleTimeZone,可以使用一组规则(开始规则和结束规则)来描述该时间表。夏令时开始或结束的日期由月,月日和星期几的组合指定。月值由Calendar MONTH字段值表示,例如Calendar.MARCH。星期几的值由日历的DAY_OF_WEEK值表示,例如SUNDAY。值组合的含义如下。
- 确切的日期 要指定确切的月份,请将月份和每月的日期设置为准确的值,并将每周的日期设置为零。例如,要指定3月1日,则将月份设置为MARCH,将每月的日期设置为1,将一周的日期设置为0。
- 星期几或某月的某天后 要指定一个星期中的确切日期或之后的星期几,请将月份设置为确切的月份值,将月份中的日期设置为应用规则的当天或之后的日期,将一周中的日期设置为负数DAY_OF_WEEK字段值。例如,要指定四月的第二个星期日,请将月份设置为APRIL,将每月的日期设置为8,将每周的日期设置为-SUNDAY。
- 一周中的某天或当月的某天 要指定一个月中的确切日期或之前的星期几,请将月中的某天和一周中的某天设置为负值。例如,要指定3月21日或之前的最后一个星期三,请将月份设置为MARCH,则每月的日期为-21,而每周的日期为-WEDNESDAY。
- 每月的最后一周 要指定该月的最后一个星期几,请将星期几设置为DAY_OF_WEEK值,并将星期几设置为-1。例如,要指定十月的最后一个星期日,请将月份设置为OCTOBER,将周几设置为SUNDAY,将周几设置为-1。
答案 1 :(得分:1)
您能否使用这些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
。
ZonedDateTime testTime = ZonedDateTime.of(2019, 3, 10, 5, 0, 0, 0, zone);
夏令时是否正确
zone.getRules()
返回一个ZoneRules
对象。这样的对象了解有关时区的UTC偏移的所有信息,也了解DST。因此,我们可以使用Instant
进行查询。我们从Instant
得到了testTime.toInstant()
。
链接: Oracle教程中的Time Zone and Offset Classes部分(包括一个使用ZoneRules
的示例,该示例在某种程度上类似于我的)。