防止“java.util.TimeZone”的夏令时

时间:2015-08-04 17:35:39

标签: java cron timezone quartz-scheduler

我正在尝试安排必须在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课吗?你能为此建议任何替代方案。

1 个答案:

答案 0 :(得分:4)

如果您想要固定偏移时区,请使用SimpleTimeZone

TimeZone tz = new SimpleTimeZone(TimeUnit.SECONDS.toMillis(-420), "id");