美文网首页
一个基于java的CRON表达式工具类

一个基于java的CRON表达式工具类

作者: 杞梓林 | 来源:发表于2019-12-16 17:05 被阅读0次

    前段时间因为要做一个流式算法框架,其中时间判定部分使用了Cron表达式,顺便写了一个Cron的工具类,用于根据一个时间标签和Cron表达式来返回下一次满足Cron表达式的时间标签。

    关于Cron表达式

    关于什么是Cron表达式,以及Cron表达式的格式网上资料很多,比如下面两个:
    Cron表达式
    Cron表达式详细用法

    解决的需求

    1 根据传入的时间标签和Cron表达式,计算下一次满足Cron表达式的时间标签
    2 用简单的时间、单位,生成简单的Cron表达式
    public class CronExpressionResolver {
    
        public static CronExpressionResolver getInstance(String cron) {
            return new CronExpressionResolver(cron);
        }
    
        private CronExpressionResolver(String cron) {
            this.cron = cron;
        }
    
        private String cron;
    
    
        /**
         * 获得下一个符合Cron表达式的时间
         * @param time time
         * @return next time
         */
        public Date nextDateTime(Date time) {
            CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);
            // currentTime为计算下次时间点的开始时间
            return cronSequenceGenerator.next(time);
        }
    
        /**
         * 获得下一个符合Cron表达式的时间
         * @param time time
         * @return next time
         */
        public Date nextDateTime(long time) {
            CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);
            // currentTime为计算下次时间点的开始时间
            return cronSequenceGenerator.next(new Date(time));
        }
    
        /**
         * 获得下一个符合Cron表达式的时间
         * @param time time
         * @return next time
         */
        public long nextLongTime(Date time) {
            CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);
            // currentTime为计算下次时间点的开始时间
            return cronSequenceGenerator.next(time).getTime();
        }
    
        /**
         * 获得下一个符合Cron表达式的时间
         * @param time time
         * @return next time
         */
        public long nextLongTime(long time) {
            CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator(cron);
            // currentTime为计算下次时间点的开始时间
            return cronSequenceGenerator.next(new Date(time)).getTime();
        }
    
        /**
         * 生成Cron表达式
         * 
         * @param num 数值
         * @param unit 单位:s-秒,m-分,h-小时,d-天,mon-月
         * @return
         */
        public static String timeToCron(int num, String unit) {
            switch (unit){
                case "s": return "0/" + num + " * * * * ?";
                case "m": return "0 0/" + num + " * * * ?";
                case "h": return "0 0 0/" + num + " * * ?";
                case "d": return "0 0 0 1/" + num + " * ?";
                case "mon": return "0 0 0 0 1/" + num + " ?";
                default: return "";
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:一个基于java的CRON表达式工具类

          本文链接:https://www.haomeiwen.com/subject/qdudnctx.html