根据Cron表达式获取近几次任务执行时间_weixin_33967071的博客-程序员秘密

技术标签: c#  ViewUI  java  javascript  

在使用Quartz进行任务调度时,需要用到Cron表达式,有时候在设置完Cron表达式之后,需要知道此cron表达式对应的最近几次执行的具体时间,我这里提供了一个方法来获取最近几次的运行时间。

package com.declan;

import java.text.SimpleDateFormat;
import java.util.Date;

import org.quartz.CronExpression;
import org.quartz.CronScheduleBuilder;
import org.quartz.CronTrigger;
import org.quartz.TriggerBuilder;

/**
 * 通过Cron表达式获取近5次的执行时间
 * @author Declan
 *
 */
public class GetScheduleTimeOfCron {
	
	
	public static void main(String[] args) {
		System.out.println(getCronSchdule("1 3 8 * * ?"));
	}
	
	
	 /**
     * 根据Cron表达式获取任务最近5次的执行时间
     * @param cron
     * @return
     */
    public static String getCronSchdule(String cron){
		String timeSchdule="";
		if(!CronExpression.isValidExpression(cron)){
			return "Cron is Illegal!";
		}
		try {
			CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("Caclulate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
			Date time0 = trigger.getStartTime();
			Date time1 = trigger.getFireTimeAfter(time0);
			Date time2 = trigger.getFireTimeAfter(time1);
			Date time3 = trigger.getFireTimeAfter(time2);
			Date time4 = trigger.getFireTimeAfter(time3);
			Date time5 = trigger.getFireTimeAfter(time4);
			SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			StringBuilder timeBuilder=new StringBuilder();
			timeBuilder
			.append(format.format(time1))
			.append("\n")
			.append(format.format(time2))
			.append("\n")
			.append(format.format(time3))
			.append("\n")
			.append(format.format(time4))
			.append("\n")
			.append(format.format(time5));
			timeSchdule=timeBuilder.toString();
		} catch (Exception e) {
			timeSchdule="unKnow Time!";
		}
		return timeSchdule;
	}

  /**
     * 根据Cron表达式获取任务最近 几次的执行时间
     * @param cron  cron表达式
     * @param count 次数
     * @return
     */
    public static List<String> getCronSchdule(String cron, int count){
    	List<String> retList = new ArrayList<String>();
		if(!CronExpression.isValidExpression(cron)){
			//Cron表达式不正确
			return retList;
		}
		try {
			CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("Caclulate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
			SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			Date startTime = trigger.getStartTime();
			for (int i = 0; i < count; i++) {
				Date time = trigger.getFireTimeAfter(startTime);
				retList.add(format.format(time ));
				startTime = time;
			}
		} catch (Exception e) {
			logger.error("", e);
		}
		return retList;
	}

}

运行后的结果

2018-04-20 08:03:01
2018-04-21 08:03:01
2018-04-22 08:03:01
2018-04-23 08:03:01
2018-04-24 08:03:01

 

转载于:https://my.oschina.net/Declan/blog/1797719

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33967071/article/details/91736206

智能推荐

使用 docker-compose.yml 快速搭建php开发环境_weixin_34375054的博客-程序员秘密

1、新建一个文件夹,里面创建文件 docker-compose.yml2、编辑docker-compose.yml 文件,保存以下内容# docker volume#docker run -d --name dbdata -h dbdata -v /wwwroot:/home/vagrant/wwwroot -v /Downloads:/home/vagrant/Down...

vue项目中利用dayjs来改变推送时间的显示样式_dayjs fornow_BBC蟹耳总的博客-程序员秘密

背景交代我们拿到的后台的推送时间的数据是这样的:但是我们需要在页面中显示比如1分钟前,1小时前类似这种效果,第一反应是自己写函数,获取当前时间戳,再把推送时间转换为时间戳,然后相减,取模相除然后去规定区间,然而这样的方法比较麻烦。请教了导师之后,给dayjs或者moment.js两款插件,其实两款差不多,我选择用dayjs,需要的功能已经帮你封装好了,资源和教程在npm中搜就能得到:dayjs资源按照教程安装好之后,我们需要导入dayjs// dayjs插件import dayjs from '

关于DEDE解决无法下载远程图片(远程抓图、存图)到本地?_北方的刀郎的博客-程序员秘密

我的网站也是突然不能“下载远程图片和资源”了,在论坛搜了半天,大多是没有回答,有回答的也不对。经过反复测试,才找到了解决办法。因为是独创的,所以想卖2金币,晕,我竟然不能设置出售,白忙活了。感觉有用的话,给个好评或奖励。方法如下后台 - 系统 - 系统基本参数 - 站点设置 - 站点根网址 - 填上网址(如:http://www.xxx.com)就能成功远程图片和资源本地化。 下载远程图片和资源

蓝牙技术——数据传输_牵手生活的博客-程序员秘密

蓝牙编程常用到的几个类类\接口功能描述BluetoothAdapter (1)本地的蓝牙适配器设备BluetoothDevice  (2)代表一个远程的蓝牙设备BluetoothServerSocket  (3)监听蓝牙服务的端口BluetoothSo

逆元知识普及(扫盲篇) —— from Judge_weixin_30548917的博客-程序员秘密

watch out本文是博主的 csdn 上搬过来的,格式有点崩,看不下去的可以去 博主的 csdn 上看(上面 格式会好很多,并且有些公式也用 $\LaTeX$ update 上去了,但是博主也在 cnblogs 上更新了一下...lateX 都用上了,应该不至于不能看)最近有点颓废啊,写篇blog振作一下…(不过没图的数论blog真是不对我胃口)emmm …首先...

numpy求协方差矩阵(numpy.cov())_np.cov函数_u013521296的博客-程序员秘密

1、关于方差与协方差方差公式:方差度量协方差公式:协方差矩阵的介绍和计算见:https://blog.csdn.net/Mr_HHH/article/details/784905762、numpy.cov()函数

随便推点

zepplin报错:java.net.SocketException: Broken pipe (Write failed)_坐着吃灬炸鸡的博客-程序员秘密

zepplin报错:java.sql.SQLException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe (Write failed)虚拟机关机再重启后登录zepplin执行hive语句就开始报错。解决方法(1)在zeppelin安装目录下的bin目录将zeppelin服务重新启动zeppelin-daemon.sh stopzeppelin-daemon.sh

oracle 官网下载_weixin_34122810的博客-程序员秘密

1.官网;http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html2.数据库网址:’http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html ...

工厂模式 && 代理模式 深入理解_js同学你好的博客-程序员秘密

OOP七大原则开闭原则:对扩展开放,对修改关闭里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立依赖倒置原则:面向接口编程,不要面向实现编程单一职责原则:控制类的粒度大小,将对象解耦,提高其内聚性接口隔离原则:要为各个类建立他们所需要的专用接口迪米特法则: 只和你的直接朋友交谈,不跟陌生人说话合成复用原则;尽量先使用组合或者聚合的关系来实现,其次才使用继承关系来实现工厂模式核心: 实例化对象不使用new ,用工厂方法代替。将选择实类,创建对象统一管理和控制,从而将我们的实现

机器学习 算法总结(二) 调参技巧_机器学习调参_thormas1996的博客-程序员秘密

偏差和方差在统计学习框架下,Error = Bias + Variance。Error指的模型的预测错误率,由两部分组成,一部分是由于模型太简单而带来的估计不准确的部分(Bias),另一部分是由于模型太复杂而带来的更大的变化空间和不确定性(Variance)。 如果要降低模型的Bias,就一定程度上会提高模型的Variance,反之亦然。根本原因是如果我们更相信训练数据的真实性,忽视对模型的...

dom对象_suxiaxuhuanhuan的博客-程序员秘密

1、dom的定义       document object model(文档对象模型)2、为什么叫文档对象模型?       1)dom可以将标记型文档(html xml)文档转换为对象       2)可以将标记型文档的每一个标记都转换为对象       3)将文档或者是标记封装成对象后,对象提供了更多的属性和方法操作文档3、节点的概念      在dom的结构图中

服务器的cd驱动器怎么修改盘符,更改dvd驱动器盘符,cd驱动器盘符改_weixin_39990558的博客-程序员秘密

有部分win7系统用户反映说,当他在电脑中安装了虚拟光驱之后,电脑就会产生好多个无效的驱动器盘符,所以就将要将它们删除掉,可以却发现右击的菜单中找不到删除选项,也无法弹出光驱,导致无法删除无效驱动器盘符,这要怎么办呢?接下来给大家分享一下Win7系统删除无效驱动器盘符右键没有删除选项要怎么解决吧!推荐:1、点击win7系统的开始菜单,右击计算机,选择管理选项卡,进入计算机管理;2、打开计算机管理后...

推荐文章

热门文章

相关标签