java生成cron表达式

bean类:

package com.cst.klocwork.service.cron;

public class TaskScheduleModel {  
    
    
    /** 
        * 所选作业类型:  
        * 1  -> 每天  
        * 2  -> 每月  
        * 3  -> 每周 
        * 4  ->间隔(每隔2个小时,每隔30分钟)
        */  
    Integer jobType;  
      
    /**一周的哪几天*/  
    Integer[] dayOfWeeks;  
      
    /**一个月的哪几天*/  
    Integer[] dayOfMonths;  
      
    /**秒  */  
    Integer second;  
      
    /**分  */  
    Integer minute;  
      
    /**时  */  
    Integer hour;     
  
    public Integer getJobType() {  
        return jobType;  
    }  
  
    public void setJobType(Integer jobType) {  
        this.jobType = jobType;  
    }  
      
    public Integer[] getDayOfWeeks() {  
        return dayOfWeeks;  
    }  
  
    public void setDayOfWeeks(Integer[] dayOfWeeks) {  
        this.dayOfWeeks = dayOfWeeks;  
    }     
  
    public Integer[] getDayOfMonths() {  
        return dayOfMonths;  
    }  
  
    public void setDayOfMonths(Integer[] dayOfMonths) {  
        this.dayOfMonths = dayOfMonths;  
    }  
  
    public Integer getSecond() {  
        return second;  
    }  
  
    public void setSecond(Integer second) {  
        this.second = second;  
    }  
  
    public Integer getMinute() {  
        return minute;  
    }  
  
    public void setMinute(Integer minute) {  
        this.minute = minute;  
    }  
  
    public Integer getHour() {  
        return hour;  
    }  
  
    public void setHour(Integer hour) {  
        this.hour = hour;  
    }  
      
      
}  

  util类:

/**  
 * @ClassName: CronUtil  
 * @Description: Cron表达式工具类  
 * 目前支持三种常用的cron表达式 
 * 1.每天的某个时间点执行 例:12 12 12 * * ?表示每天12时12分12秒执行 
 * 2.每周的哪几天执行         例:12 12 12 ? * 1,2,3表示每周的周1周2周3 ,12时12分12秒执行 
 * 3.每月的哪几天执行         例:12 12 12 1,21,13 * ?表示每月的1号21号13号 12时12分12秒执行 
 * @author  
 * @date  
 *  
 */    
public class CronUtil {    
        
        
      
    /**  
     *   
     *方法摘要:构建Cron表达式  
     *@param  taskScheduleModel  
     *@return String  
     */    
    public static String createCronExpression(TaskScheduleModel taskScheduleModel){    
        StringBuffer cronExp = new StringBuffer("");    
          
        if(null == taskScheduleModel.getJobType()) {  
            System.out.println("执行周期未配置" );//执行周期未配置  
        }  
          
        if (null != taskScheduleModel.getSecond()  
                && null != taskScheduleModel.getMinute()  
                && null != taskScheduleModel.getHour()) {    
            //秒    
            cronExp.append(taskScheduleModel.getSecond()).append(" ");    
            //分    
            cronExp.append(taskScheduleModel.getMinute()).append(" ");    
            //小时    
            cronExp.append(taskScheduleModel.getHour()).append(" ");    
                
            //每天    
            if(taskScheduleModel.getJobType().intValue() == 1){    
                cronExp.append("* ");//日  
                cronExp.append("* ");//月  
                cronExp.append("?");//周  
            }  
                
            //按每周    
            else if(taskScheduleModel.getJobType().intValue() == 3){    
                //一个月中第几天    
                cronExp.append("? ");    
                //月份    
                cronExp.append("* ");    
                //周    
                Integer[] weeks = taskScheduleModel.getDayOfWeeks();    
                for(int i = 0; i < weeks.length; i++){    
                    if(i == 0){    
                        cronExp.append(weeks[i]);    
                    } else{    
                        cronExp.append(",").append(weeks[i]);    
                    }    
                }    
                    
            }    
                
            //按每月    
            else if(taskScheduleModel.getJobType().intValue() == 2){    
                //一个月中的哪几天    
                Integer[] days = taskScheduleModel.getDayOfMonths();    
                for(int i = 0; i < days.length; i++){    
                    if(i == 0){    
                        cronExp.append(days[i]);    
                    } else{    
                        cronExp.append(",").append(days[i]);    
                    }    
                }    
                //月份    
                cronExp.append(" * ");    
                //周    
                cronExp.append("?");    
            }    
                
        }    
        else {  
            System.out.println("时或分或秒参数未配置" );//时或分或秒参数未配置  
        }  
        return cronExp.toString();    
    }    
        
    /**  
     *   
     *方法摘要:生成计划的详细描述  
     *@param  taskScheduleModel  
     *@return String  
     */    
    public static String createDescription(TaskScheduleModel taskScheduleModel){    
        StringBuffer description = new StringBuffer("");    
        //计划执行开始时间    
//      Date startTime = taskScheduleModel.getScheduleStartTime();    
            
        if (null != taskScheduleModel.getSecond()  
                && null != taskScheduleModel.getMinute()  
                && null != taskScheduleModel.getHour()) {   
            //按每天    
            if(taskScheduleModel.getJobType().intValue() == 1){    
                description.append("每天");    
                description.append(taskScheduleModel.getHour()).append("时");    
                description.append(taskScheduleModel.getMinute()).append("分");    
                description.append(taskScheduleModel.getSecond()).append("秒");    
                description.append("执行");    
            }    
                
            //按每周    
            else if(taskScheduleModel.getJobType().intValue() == 3){    
                if(taskScheduleModel.getDayOfWeeks() != null && taskScheduleModel.getDayOfWeeks().length > 0) {    
                    String days = "";  
                    for(int i : taskScheduleModel.getDayOfWeeks()) {  
                        days += "周" + i;  
                    }  
                    description.append("每周的").append(days).append(" ");    
                }    
                if (null != taskScheduleModel.getSecond()  
                        && null != taskScheduleModel.getMinute()  
                        && null != taskScheduleModel.getHour()) {     
                    description.append(",");     
                    description.append(taskScheduleModel.getHour()).append("时");    
                    description.append(taskScheduleModel.getMinute()).append("分");    
                    description.append(taskScheduleModel.getSecond()).append("秒");   
                }    
                description.append("执行");    
            }    
                
            //按每月    
            else if(taskScheduleModel.getJobType().intValue() == 2){    
                //选择月份    
                if(taskScheduleModel.getDayOfMonths() != null && taskScheduleModel.getDayOfMonths().length > 0) {    
                    String days = "";  
                    for(int i : taskScheduleModel.getDayOfMonths()) {  
                        days += i + "号";  
                    }  
                    description.append("每月的").append(days).append(" ");    
                }      
                description.append(taskScheduleModel.getHour()).append("时");    
                description.append(taskScheduleModel.getMinute()).append("分");    
                description.append(taskScheduleModel.getSecond()).append("秒");   
                description.append("执行");    
            }    
                
        }    
        return description.toString();    
    }  
      
    //参考例子  
    public static void main(String[] args) {  
        //执行时间:每天的12时12分12秒 start  
        TaskScheduleModel taskScheduleModel = new TaskScheduleModel();  
        taskScheduleModel.setJobType(1);//按每天  
        Integer hour = 12; //时  
        Integer minute = 12; //分  
        Integer second = 12; //秒  
        taskScheduleModel.setHour(hour);  
        taskScheduleModel.setMinute(minute);  
        taskScheduleModel.setSecond(second);  
        String cropExp = createCronExpression(taskScheduleModel);  
        System.out.println(cropExp + ":" + createDescription(taskScheduleModel));  
        //执行时间:每天的12时12分12秒 end  
          
        taskScheduleModel.setJobType(3);//每周的哪几天执行  
        Integer[] dayOfWeeks = new Integer[3];  
        dayOfWeeks[0] = 1;  
        dayOfWeeks[1] = 2;  
        dayOfWeeks[2] = 3;  
        taskScheduleModel.setDayOfWeeks(dayOfWeeks);  
        cropExp = createCronExpression(taskScheduleModel);  
        System.out.println(cropExp + ":" + createDescription(taskScheduleModel));  
          
        taskScheduleModel.setJobType(2);//每月的哪几天执行  
        Integer[] dayOfMonths = new Integer[3];  
        dayOfMonths[0] = 1;  
        dayOfMonths[1] = 21;  
        dayOfMonths[2] = 13;  
        taskScheduleModel.setDayOfMonths(dayOfMonths);  
        cropExp = createCronExpression(taskScheduleModel);  
        System.out.println(cropExp + ":" + createDescription(taskScheduleModel));  
          
    }  
}  

  

原文地址:https://www.cnblogs.com/chcha1/p/11274943.html