JAVA根據每天每週每月生成cron表達式

由於現有cron生成頁面過於複雜,因此簡化爲下圖所示
每日執行
每週1的4點10分執行
每月1號的6點20分執行
注意:按每週執行時,選擇的週一 需要傳2,週二-3,週三-4,週四-5,週五-6,週六-7,週日-1,按照該對應關係纔可。

對應的轉換cron工具類如下

package com.develop.common.utils;

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

/**
 * @ClassName: CronUtil
 * @author bxf
 * @date 2020-6-30 16:09:09
 *
 */
public class CronUtil {

	/**
	 * 方法摘要:構建Cron表達式
	 * @param type 類型 0:每天一次;1:每週一次;2:每月一次
	 * @param param1 下拉列表,根據type進行變換, type=0時,param1=0;type=1時,param1從1-7選;type=2時,param1從1-28選
	 * @param param2 小時 0-23
	 * @param param3 分鐘 0-59
	 * @return
	 */
    public static String createLoopCronExpression(int type,int param1,int param2,int param3) {
        String cron = "";
        switch (type) {
        case 0:// 每天的param2時,param3分執行
            cron = "0 "+ param3+" "+param2+" * * ? ";
            break;
        case 1:// 每週的param1的param2時,param3分執行
            cron = "0 "+param3+" "+param2+" ? * "+param1+" *";
            break;
        case 2:// 每月的param1號的param2時,param3分執行
            cron = "0 "+param3+" "+param2+" "+param1+" * ? *";
            break;
        }
        return cron;
    }

	/**
	 * 方法摘要:構建Cron描述
	 * @param type 類型 0:每天一次;1:每週一次;2:每月一次
	 * @param param1 下拉列表,根據type進行變換, type=0時,param1=0;type=1時,param1從1-7選;type=2時,param1從1-28選
	 * @param param2 小時 0-23
	 * @param param3 分鐘 0-59
	 * @return
	 */
    public static String createLoopCronDescription(int type,int param1,int param2,int param3) {
        String desc = "";
        switch (type) {
        case 0:// 每天的param2時,param3分執行
        	desc = "每天" + param2 + "點"+param3+"分觸發一次任務";
            break;
        case 1:// 每週的param1的param2時,param3分執行
        	desc = "每週"+param1+"的"+param2+"點"+param3+"分觸發一次任務";
            break;
        case 2:// 每月的param1號的param2時,param3分執行
        	desc = "每月"+param1+"號的"+param2+"點"+param3+"分觸發一次任務";
            break;
        }
        return desc;
    }
    
    /**
     * 通過輸入指定日期時間生成cron表達式
     * @param date
     * @return cron表達式
     */
    public static String getCron(Date date){
        String dateFormat="ss mm HH dd MM ? *";
        SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);
        String formatTimeStr = null;
        if (date != null) {
            formatTimeStr = sdf.format(date);
        }
 
        return formatTimeStr;
    }

    // 參考例子
    public static void main(String[] args) {
    	
        System.out.println(CronUtil.createLoopCronExpression(0,0,10,50));
        System.out.println(CronUtil.createLoopCronDescription(0,0,10,50));
        
        System.out.println(CronUtil.createLoopCronExpression(1,2,12,40));
        System.out.println(CronUtil.createLoopCronDescription(1,2,12,40));

        System.out.println(CronUtil.createLoopCronExpression(2,28,07,30));
        System.out.println(CronUtil.createLoopCronDescription(2,28,07,30));

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章