我的第一张照片显示夏令时从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);
最佳答案
DST于2019年3月9日在美国东部地区未生效,于3月10日凌晨2点See timeanddate.com生效。
我的第一张照片显示夏令时从3月8日开始...
我猜您是基于此:
startMode = 3,
startMonth = 2,
startDay = 8,
startDayOfWeek = 1,
startTime = 7200000
请记住,DST更改(至少在美国是这样)总是在周日的清晨发生。该规则表示,应在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。
关于java - 为什么inDaylightTime()方法在时区返回错误?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55139831/