提问者:小点点

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


我正在尝试安排必须在8月和11月的第一个星期二发送的提醒电子邮件。当我这样做时,11月剩余电子邮件的时间从上午10:00更改为上午11:00(下一个运行时间)。它在8月的上午10:00正确触发。这可能是因为夏令时。我应该如何防止这种情况发生。

用于设置时区的代码是:

java.util.TimeZone tz = TimeZone.getDefault();
tz = TimeZone.getTimeZone("US/Pacific");

当我使用调试器检查tz时,它的值是:

太阳. util.日历.区域信息[id="US/太平洋",offset=-28800000,dst储蓄=3600000,使用日光=true,过渡=185,最后规则=java.util.简单时区[id=US/太平洋,偏移=-28800000,dst储蓄=3600000,使用日光=true,开始年=0,开始模式=3,开始月=2,开始日=8,开始日=1,开始时间=7200000,开始时间模式=0,结束模式=3,结束月=10,结束日=1,结束日=1,结束时间=7200000,结束时间模式=0]]

创建CRON作业的代码是

org.quartz.TriggerBuilder builder = newTrigger().withSchedule(cronSchedule("0 0 10 ? AUG,NOV TUE#1").inTimeZone(tz));

我试图找到类似的问题,但没有运气。我应该使用Calendar类吗?你能为此提出任何替代方案吗?


共1个答案

匿名用户

如果你想要一个固定偏移的时区,只需使用SimpleTimeZone

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