为了账号安全,请及时绑定邮箱和手机立即绑定

如何在给定时间安排任务,例如早上 7:15

如何在给定时间安排任务,例如早上 7:15

森林海 2023-06-08 17:35:46
所以我想在特定时间安排一个任务,比如早上 7:15,并想执行一次,我想使用 Quartz,但它让任务每隔一段时间执行一次(例如 5 分钟),但我不我不想这样,我想根据实时时间安排任务。谢谢
查看完整描述

3 回答

?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

并想执行一次,


我的一些旧代码可以触发一次性的预定工作


Calendar cal = Calendar.getInstance();

SimpleDateFormat df = new SimpleDateFormat("yyyy/MM/dd");

cal.setTime(df.parse(job.getRunatDate()));

cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(job.getRunatHour()));

cal.set(Calendar.MINUTE, Integer.parseInt(job.getRunatMin()));


log.debug ("One-off job at " + cal.getTime());


Trigger trigger = (SimpleTrigger) TriggerBuilder.newTrigger() 

                    .withIdentity("trigger" + job.getLineNumber(), "group1")

                    .startAt(cal.getTime()) 

                     .build();


sched = new StdSchedulerFactory().getScheduler();

sched.start();

sched.scheduleJob(job, trigger);

查看完整回答
反对 回复 2023-06-08
?
精慕HU

TA贡献1845条经验 获得超8个赞

获取您想要的时区中看到的当前时刻。


ZoneId z = ZoneId.of( "America/Montreal" ) ;

ZonedDateTime zdtNow = ZonedDateTime.now( z ) ;

定义你的目标时间。


LocalTime targetTime = LocalTime.of( 7 , 15 ) ;

与当前时间进行比较。


LocalTime timeNow = zdtNow.toLocalTime() ;

ZonedDateTime targetZdt = zdtNow.with( targetTime ) ;

if( ! timeNow.isbefore( targetTime ) )

{

    targetZdt = targetZdt.plusDays( 1 ) ;  // Auto-adjusts if this time of day is not valid on that date in that zone. 

}

计算到那时为止经过的时间。


Duration d = Duration.between( zdtNow , targetZdt ) ;

ScheduledExcutorService在等待 Duration 中的时间量后,使用 Executors 框架以单线程安排您的 Runnable 任务。

查看完整回答
反对 回复 2023-06-08
?
慕村9548890

TA贡献1884条经验 获得超4个赞

谢谢你们的帮助,我在这里找到了答案:

CronTrigger 示例 1 - 用于创建每 5 分钟触发一次的触发器的表达式

“0 0/5 * * * ?”

CronTrigger 示例 2 - 创建触发器的表达式,该触发器每 5 分钟触发一次,在该分钟后的 10 秒(即上午 10:00:10、上午 10:05:10 等)触发。

“10 0/5 * * * ?”

CronTrigger 示例 3 - 用于创建触发器的表达式,该触发器在每周三和周五的 10:30、11:30、12:30 和 13:30 触发。

“0 30 10-13 ?* 周三、周五”

CronTrigger 示例 4 - 创建触发器的表达式,该触发器在每月 5 号和 20 号的上午 8 点到 10 点之间每半小时触发一次。请注意,触发器不会在上午 10:00 触发,仅在 8:00、8:30、9:00 和 9:30 触发

“0 0/30 8-9 5,20 * ?”

请注意,某些调度要求过于复杂,无法用单个触发器来表达——例如“上午 9:00 到 10:00 之间每 5 分钟一次,下午 1:00 到 10:00 之间每 20 分钟一次”。这种情况下的解决方案是简单地创建两个触发器,并注册它们以运行同一个作业。


查看完整回答
反对 回复 2023-06-08
  • 3 回答
  • 0 关注
  • 156 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信