我正在尝试安排一封提醒电子邮件,该电子邮件必须在 8 月和 11 月的第一个星期二发送。当我这样做时,11 月的剩余电子邮件时间将从上午 10:00 更改为上午 11:00(下次运行时间)。它于 8 月上午 10:00 正确发射。这可能是因为夏令时。我应该如何防止这种情况发生。
用于设置时区的代码是:
java.util.TimeZone tz = TimeZone.getDefault();
tz = TimeZone.getTimeZone("US/Pacific");
当我使用调试器检查tz
时,它的值为:
sun.util.calendar.ZoneInfo[id="US/Pacific",offset=-28800000,dstSavings=3600000,useDaylight=true,transitions=185,lastRule=java.util.SimpleTimeZone[id=US/Pacific,offset=-28800000,dstSavings=3600000,useDaylight=true,startYear=0,startMode=3,startMonth=2,startDay=8,startDayOfWeek=1,startTime=7200000,startTimeMode=0,endMode=3,endMonth=10,endDay=1,endDayOfWeek=1,endTime=7200000,endTimeMode=0]]
创建 CRON 作业的代码是
org.quartz.TriggerBuilder builder = newTrigger().withSchedule(cronSchedule("0 0 10 ? AUG,NOV TUE#1").inTimeZone(tz));
我试图找到类似的问题,但没有运气。我应该使用 Calendar
类吗?您能建议任何替代方案吗?
最佳答案
如果您想要固定偏移时区,只需使用 SimpleTimeZone
:
TimeZone tz = new SimpleTimeZone(TimeUnit.SECONDS.toMillis(-420), "id");
关于java - 阻止 "java.util.TimeZone"夏令时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31815755/