crontab工具类 断给定的时间 是否 满足 crontab 表达式.md
crontab工具类 断给定的时间 是否 满足 crontab 表达式.md
北京起航 发表于3年前
crontab工具类 断给定的时间 是否 满足 crontab 表达式.md
  • 发表于 3年前
  • 阅读 23
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

摘要: crontab工具类 断给定的时间 是否 满足 crontab 表达式.md

itone.crontab工具类.md

 
/**
* 断给定的时间 是否 满足 crontab 表达式【忽略毫秒】
* 可以接受指定秒数 误差
*
*/
public class CrontabUtils {
   private static final Logger LOGGER = LoggerFactory.getLogger(CrontabUtils.class);
 
    /**
     * 判断给定的时间 是否 满足 crontab 表达式【忽略毫秒】
     *
     * @param date the date to evaluate
     * @return a boolean indicating whether the given date satisfies the cron
     * expression
     */
    public static boolean isMatch(String crontabExpress, Date date) {
        try {
            CronExpression crontabExpression = new CronExpression(crontabExpress);
            return crontabExpression.isSatisfiedBy(date);
        } catch (ParseException e) {
            LOGGER.error(e.getMessage(), e);
            return false;
        }
    }
    public static boolean isMatch(CronExpression cronExpression, Date date) {
        return cronExpression.isSatisfiedBy(date);
    }
 
    /**
     * 判断给定的时间 是否 满足 crontab 表达式【忽略毫秒】 可以接受指定秒数 误差
     * @param cronExpression
     * @param date
     * @param secondsRange  可以接受指定秒数
     * @return
     */
    public static boolean isMatchRange(CronExpression cronExpression,Date date,int secondsRange) {
        Calendar testDateCal = Calendar.getInstance(cronExpression.getTimeZone());
        testDateCal.setTime(date);
        testDateCal.set(Calendar.MILLISECOND, 0);
        Date originalDate = testDateCal.getTime();
        testDateCal.add(Calendar.SECOND, -secondsRange-1);
        Date timeAfter = cronExpression.getTimeAfter(testDateCal.getTime());
        return ((timeAfter != null) && (Math.abs(timeAfter.getTime()-originalDate.getTime())<=secondsRange*1000));
    }
 
    /**
     * 判断给定的时间 是否 满足 crontab 表达式【忽略毫秒】 可以接受指定秒数 误差
     */
    public static boolean isMatchRange(CronExpression cronExpression,long seconds,int secondsRange) {
        return isMatchRange(cronExpression, new Date(seconds * 1000), secondsRange);
    }
    /**
     * 判断给定的时间 是否 满足 crontab 表达式【忽略毫秒】 可以接受指定秒数 误差
     */
    public static boolean isMatchRange(String crontab,Date date,int secondsRange) {
        try {
            CronExpression crontabExpression = new CronExpression(crontab);
            return isMatchRange(crontabExpression,date,secondsRange);
        } catch (ParseException e) {
            LOGGER.error(e.getMessage(), e);
            return false;
        }
    }
}
共有 人打赏支持
粉丝 52
博文 51
码字总数 29304
×
北京起航
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: