我正在尝试安排必须在8月和11月的第一个星期二发送的提醒电子邮件。当我这样做时,11月剩余电子邮件的时间从上午10:00到上午11:00(下一次运行时间)发生变化。它在8月上午10点正确解雇。这可能是因为夏令时。我应该如何防止这种情况发生。
用于设置时区的代码是:
java.util.TimeZone tz = TimeZone.getDefault();
tz = TimeZone.getTimeZone("US/Pacific");
当我使用调试器检查tz
时,它的值是:
sun.util.calendar.ZoneInfo [ID = “US /太平洋”,偏移= -28800000,dstSavings = 3600000,的 useDaylight =真下,过渡= 185,lastRule = java.util.SimpleTimeZone中[ID = US /太平洋,偏移= -28800000,dstSavings = 3600000,useDaylight =真,startYear = 0,STARTMODE = 3,startMonth = 2,朝九特派= 8,startDayOfWeek = 1,开始时间= 7200000,startTimeMode = 0,endMode = 3,endMonth = 10,endday指定= 1,一个endDayOfWeek = 1,结束时间= 7200000,endTimeMode = 0]]
创建CRON作业的代码是
org.quartz.TriggerBuilder builder = newTrigger().withSchedule(cronSchedule("0 0 10 ? AUG,NOV TUE#1").inTimeZone(tz));
我试图找到类似的问题,但没有运气。我应该使用Calendar
课吗?你能为此建议任何替代方案。
答案 0 :(得分:4)
如果您想要固定偏移时区,请使用SimpleTimeZone
:
TimeZone tz = new SimpleTimeZone(TimeUnit.SECONDS.toMillis(-420), "id");