gpt4 book ai didi

java - Quartz CronTrigger - 获取下一个触发时间

转载 作者:IT老高 更新时间:2023-10-28 20:57:55 39 4
gpt4 key购买 nike

我正在使用 Quartz CronTrigger 工具来解析 cron 计划格式字符串,以确定何时运行特定作业。不过,我实际上并没有使用 Quartz 来安排工作。

CronTrigger 中有一个名为 getFireTimeAfter(Date) 的方法,它给出了在给定日期之后作业的下一次触发时间。当提供的日期是现在或将来时,这很有效。但如果日期是过去,它似乎不起作用。

Date currTime = new Date();
CronTrigger tr = new CronTrigger();
tr.setCronExpression("0 0 23 3,18 * ? *");
Date nextFireAt = tr.getFireTimeAfter(currTime);
System.out.println("Reference time: " + currTime);
System.out.println("Next fire after reference time: " + nextFireAt);

这是在每月 3 日和 18 日 23:00 触发的 cron 计划。例如,如果我今天(8 月 11 日)这样做,我会看到:

Reference time: Thu Aug 11 10:04:25 MDT 2011
Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011

但如果我将引用日期设置为过去,它会给我相同的下一次点火时间。

Reference time: Wed Dec 31 17:00:00 MST 1969
Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011

我期待的输出是:

Reference time: Wed Dec 31 17:00:00 MST 1969
Next fire after reference time: Wed Aug 3 23:00:00 MDT 2011

该方法只是不打算以这种方式工作还是我做错了什么?

谢谢!

最佳答案

你真正想直接使用 CronExpression 对象而不是 CronTrigger。正如您所发现的,它不会计算过去的下一次运行时间......但 CronExpression 会!

CronExpression 有方法:getNextValidTimeAfter。这就是你想要的。

关于java - Quartz CronTrigger - 获取下一个触发时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7029196/

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