gpt4 book ai didi

quartz-scheduler - 如何处理 cron 触发器的 quartz 夏令时的用户时区?

转载 作者:行者123 更新时间:2023-12-05 04:08:49 25 4
gpt4 key购买 nike

我的服务 api 接受 quartz 作业的开始日期和执行作业的月份日期。在内部,我将其转换为 cron 表达式并保存在 quartz 中。

例如,PST 中的用户今天(2017 年 11 月 3 日)提交了如下工作请求。

{
"start": "2017-11-03T18:00:00-07:00",
"dayOfMonth" : 15
}

在这里,用户想要安排一个作业,从 2017 年 11 月 3 日开始,在每个月的 15 日下午 6 点触发。所以第一天 quartz 会火将是 2017-11-15。这就是上述请求如何转换为 cron 表达式 0 0 18 15 * ? *,这是正确的。这是 QRTZ_CRON_TRIGGERS 表的样子。

enter image description here

如您所见,time_zone_id 保存为 GMT-07:00,但一旦夏令时在 11 月 5 日生效,它必须是 GMT-08:00。否则我的 quartz 作业会提前一小时启动。事实上,当我查询 nextFireTime 时,我确实得到了 1510794000000,这确实是 2017 年 11 月 15 日星期三 17:00:00 (pm) 在时区美国/洛杉矶 (PST)

我们如何处理这个 time_zone_id 问题?

P.S:我使用的 cronTrigger 没有 CalendarIntervalTrigger 提供的 preserveHourOfDayAcrossDaylightSavings 的概念。

最佳答案

不要使用偏移量来表示时区。相反,您可以要求用户输入时区,例如“America/Los_Angeles”。然后你可以使用http://www.quartz-scheduler.org/api/2.2.1/org/quartz/CronScheduleBuilder.html#inTimeZone(java.util.TimeZone)创建具有适当时区的触发器。

inTimeZone(TimeZone.getTimeZone("USER_ENTERED_VALUE")

最后,当您查看 QRTZ_CRON_TRIGGERS 表时,TIME_ZONE_ID 的值将为America/Los_Angeles

关于quartz-scheduler - 如何处理 cron 触发器的 quartz 夏令时的用户时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47107548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com