【问题标题】:Prevent Daylight saving for "java.util.TimeZone"防止“java.util.TimeZone”的夏令时
【发布时间】:2015-08-05 01:44:02
【问题描述】:

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

【问题讨论】:

  • MiscUtils 来自哪里?
  • 刚刚替换了代码。对不起..

标签: java cron timezone quartz-scheduler


【解决方案1】:

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

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

【讨论】:

  • @bhanuuday:无论您希望时区的 ID 是什么。它可能与您的用例无关。
猜你喜欢
  • 2012-08-22
  • 2014-11-06
  • 2013-02-18
  • 2011-02-22
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
相关资源
最近更新 更多