获取cron表达式最近的运行时间(反解析cron表达式)&&判断cron表达式最近的运行时间是否是今天 && 最近的运行时间是否是今天

获取cron表达式下一次的运行时间(反解析cron表达式)&&判断cron表达式下一次的运行时间是否是今天 && 最近的运行时间是否是今天

反解析cron表达式

二话不说,上代码(嗯~,真香)

public static List<Date> getCronRunTime(String cron) {
		List<Date> dates = null;
		try {
			CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
			cronTriggerImpl.setCronExpression(cron);
			// 重点(指定获取最近几次的运行时间,这里指定为8次)
			dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 8);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return dates;
	}

判断cron表达式下一次的运行时间是否是今天

	public static boolean getLastRunTimeByCron(String cron) {
		List<Date> dates = null;
		try {
			CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
			cronTriggerImpl.setCronExpression(cron);
			dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 1);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		if (dates != null && dates.size() != 0) {
			Date date = dates.get(0);
			long epochMilli = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
			Date firstDate = new Date(epochMilli);
			Date lastDate = new Date(epochMilli+86400000);
			if (date.before(lastDate) && date.after(firstDate)) {
				return true;	
			}else {
				return false;
			}
		}else {
			return false;
		}
	}

判断cron表达式上一次的运行时间和下一次的运行时间是否是今天(最近的运行时间是否是今天)

	public static boolean getLastRunTimeByCron(String cron) {
		if(!CronExpression.isValidExpression(cron)){
			return false;
		}
		CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("Caclulate Date").withSchedule(CronScheduleBuilder.cronSchedule(cron)).build();
		Date time0 = trigger.getStartTime();
//		获取下一次运行时间
		Date nexTime = trigger.getFireTimeAfter(time0);
//		获取上一次运行时间
		Date time2 = trigger.getFireTimeAfter(nexTime);
		Date time3 = trigger.getFireTimeAfter(time2);
		long last = nexTime.getTime()-(time3.getTime()-time2.getTime());
		Date lastDate = new Date(last);
		long epochMilli = LocalDateTime.of(LocalDate.now(), LocalTime.MIN).toInstant(ZoneOffset.ofHours(8)).toEpochMilli();
		Date firstDatemillisecond = new Date(epochMilli);
		Date endDatemillisecond = new Date(epochMilli+86400000);
		if (lastDate.after(firstDatemillisecond)&&lastDate.before(endDatemillisecond)) {
			return true;
		}
		if (nexTime.after(firstDatemillisecond)&&nexTime.before(endDatemillisecond)) {
			return true;
		}
		return false;
	}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值