"java.util.TimeZone" 禁止夏令时

Prevent Daylight saving for "java.util.TimeZone"

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

用于设置时区的代码是:

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 class 吗?你能建议任何替代方案吗?

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

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