我正在使用Quartz-Scheduler执行重复性任务,但遇到了麻烦。在我的服务器端,我的用户想要指定一些日期范围,例如 From
2013-09-27
with in 09:00 AM - 12:00 PM
到 2013-09-30
说明:
从2013-09-27
到2013-09-30
但仅在之间运行作业09:00 AM - 12:00 PM
我在为其编写Cron表达式时遇到了麻烦,而且我的用户不是技术人员,所以我的用户希望我从两个时间戳值中自动创建Cron表达式。
请帮帮我。让我知道是否还有其他方法。
我在Google上看到了很多资源,但仍然找不到。
链接:
http://quartz-
scheduler.org/documentation/quartz-1.x/tutorials/crontrigger
http://quartz-scheduler.org/documentation/quartz-2.x/tutorials/tutorial-
lesson-05
unix /
linux中的cron表达式是否允许指定确切的开始和结束日期
更新资料
我写了一个,但是没用
|------------------------------------------------------------------|
| Seconds | Minutes | Hours | DayOfMonth | Month | DayOfWeek | Year|
| | | | | | | |
| 0 | 0 | 9-12 | 27-30 | 9 | ? | 2013|
|------------------------------------------------------------------|
尝试映射2013-09-27
到2013-09-30
但仅映射到09:00 AM - 12:00 PM
更新, 我也尝试过与
Trigger trigger = TriggerBuilder.newTrigger().withIdentity(NAME_TRIGGER_TASK_UPDATER, GROUP_TASK_TRIGGER)
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 19-22 10 ? *")).build();
但是它不会产生任何错误,也不会进入我的工作的执行方法
cronSchedule("0 0 9-12 ? * ?") throws invalid schedule exception.
下面的代码在不考虑开始和结束日期的情况下运行它。
String startDateStr = "2013-09-27 00:00:00.0";
String endDateStr = "2013-09-31 00:00:00.0";
Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(startDateStr);
Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateStr);
CronTrigger cronTrigger = newTrigger()
.withIdentity("trigger1", "testJob")
.startAt(startDate)
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 * * ?"))
.endAt(endDate)
.build();
当您说它不起作用时,您会得到什么错误?
您可以尝试以下代码( 编辑: 适用于Quartz
2.2)。此方法未在cron表达式中指定开始/结束日期和年份,而是使用Trigger方法指定它们。(注意:我自己尚未测试过,请告诉我它是否对您有用)
编辑: 我有机会测试此代码,我在下面的代码中运行并不断更改系统时钟,并且从开始到结束日期的上午9点至12点之间,所有触发器均成功。
public class CronJob {
public static void main(String[] args) throws ParseException, SchedulerException {
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
JobDetail job = newJob(TestJob.class)
.withIdentity("cronJob", "testJob")
.build();
String startDateStr = "2013-09-27 00:00:00.0";
String endDateStr = "2013-09-31 00:00:00.0";
Date startDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(startDateStr);
Date endDate = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.S").parse(endDateStr);
CronTrigger cronTrigger = newTrigger()
.withIdentity("trigger1", "testJob")
.startAt(startDate)
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 9-12 * * ?").withMisfireHandlingInstructionDoNothing())
.endAt(endDate)
.build();
scheduler.scheduleJob(job, cronTrigger);
scheduler.start();
}
public static class TestJob implements Job {
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
System.out.println("this is a cron scheduled test job");
}
}
}
如果上面的代码不能正常工作,尝试更换cronSchedule("0 0 9-12 * * ?")
与cronSchedule("0 0 9-12 ? * ?")
问题内容: 如果可能的话,在以下情况下,我希望使用joda或非joda解决方案 假设我的一周从2012年5月2日开始,给定的当前日期为02/22/2011。我需要计算给定当前日期的星期开始和结束日期。因此,我的解决方案的星期应该从02/19开始,而星期在02/25结束。为简单起见,我将我的工作日设置为02/05/2011,但是可能是任何一天,我的工作日始终为7天。 我现有的代码如下,但似乎无法按预
问题内容: 我想检查日期是否在开始日期和结束日期之间。 我添加了一个where子句 但问题在于它不包含“ 2010-04-15”。 它应该包括结束日期,我该怎么办? 请帮我 问候, 潘卡 问题答案: 明确指定时间部分:
我有一个类似于以下内容的DataFrame(sqlDF)(在本例中进行了简化),其中我试图删除在另一行的开始日期和结束日期范围内具有start_date和end_date的所有行: 首先,最终用户要求我删除start_date和end_date之间间隔小于5天的所有记录,我使用了以下方法: 从而产生如下所示的数据frame: 现在,我需要筛选出开始日期和结束日期在同一id的另一行开始日期和结束日期
问题内容: 我有一个事件表,其中记录了一个开始和结束时间,作为MySQL DATETIME对象(格式。我想查找在特定日期范围内发生的所有事件。但是,事件可能跨越多天(并且超出了我的范围)日期范围,但是如果它们与我的日期范围重叠1秒或更长时间,我想返回它们。 有什么建议吗? 问题答案: 这将找到范围内完全包含的每个事件: 这将查找事件的任何部分与范围的任何部分重叠的任何事件:
我有两个字符串作为startDate和endDate。这些值如下所示,例如: 现在让我们说,这些都是在山区时间作为startDate一天的开始和endDate一天的结束。但由于这些是字符串,我如何让程序理解这些字符串可以转换为山区当地时间,如: 时区是动态的。我可以从东部时间或任何其他时区获得时间戳字符串。 更新 我意识到我应该输入更多的信息。 所以我输入的Moutain时间就是一个例子。它可以来
问题内容: 我在从表中显示正确的数据时遇到了麻烦。我不太确定要搜索什么。我不确定min(column)或max(column)在这里对我有帮助。让我们看看我是否可以解释我的问题。 我的表包含以下数据: 我将以一种观点来介绍这一点。它将按代码分组。 我想要的是此输出: 如您所见,DateTo和DateFrom之间是否存在间隙,我希望将其显示为两行。但是,如果具有相同代码的下一个“ DateFrom”