Cron expression with start and end time

后端 未结 4 1904
南笙
南笙 2021-01-19 00:15

I am trying to write an cron expression with a specific start time and end time everyday. i.e. every minute from 10:15 to 17:35 everyday

One possible solution for t

4条回答
  •  太阳男子
    2021-01-19 00:45

       HashMap weekday = new HashMap<>();
        // String strDays ="[Monday, Friday]";
        String strCalDay = "";
    
        String startDate[] = fromDate.split("-");
        String endDate[] = toDate.split("-");
    
        weekday.put("MONDAY", "1");
        weekday.put("TUESDAY", "2");
        weekday.put("WEDNESDAY", "3");
        weekday.put("THURSDAY", "4");
        weekday.put("FRIDAY", "5");
        weekday.put("SATURDAY", "6");
        weekday.put("SUNDAY", "7");
    
        strDays = strDays.replace("[", "").replace("]", "");
        String strDay[] = strDays.trim().toUpperCase().split(",");
        if (strDay != null && strDay.length > 0) {
            for (int i = 0; i < strDay.length; i++) {
                strCalDay = strCalDay + "," + weekday.get(strDay[i].trim().replace("\"", ""));
            }
            // System.out.println(" No of days :: "+ strCalDay);
            strCalDay = strCalDay.replaceFirst(",", "");
            //System.out.println(" No of days :: "+ strCalDay);
        }
    
    
        Calendar startCal = Calendar.getInstance(TimeZone.getDefault());
        Calendar endCal = Calendar.getInstance(TimeZone.getDefault());
        startCal.set(Integer.parseInt(startDate[0].toString()),
                Integer.parseInt(startDate[1].toString()),
                Integer.parseInt((startDate[2].toString())));
    
        endCal.set(Integer.parseInt(endDate[0].toString()),
                Integer.parseInt(endDate[1].toString()),
                Integer.parseInt((endDate[2].toString())));
    
        int yearsInBetween = endCal.get(Calendar.YEAR) - startCal.get(Calendar.YEAR);
        int monthsDiff = endCal.get(Calendar.MONTH) - startCal.get(Calendar.MONTH);
        long ageInMonths = yearsInBetween * 12 + monthsDiff;
        System.out.println("  ageInMonths: " + ageInMonths);
    
    
        if (startCal.get(Calendar.MONTH) != endCal.get(Calendar.MONTH)) {
            if (ageInMonths == 3) {
                Calendar middleMonth1 = (Calendar) startCal.clone();
                middleMonth1.add(Calendar.MONTH, 1);
                Calendar middleMonth2 = (Calendar) startCal.clone();
                middleMonth2.add(Calendar.MONTH, 2);
    
                int getFirstMMonth = middleMonth1.get(Calendar.MONTH);
                int getSecMMonth = middleMonth2.get(Calendar.MONTH);
                if (getFirstMMonth == 0) {
                    getFirstMMonth = 12;
                    System.out.println("  getFirstMMonth : " + getFirstMMonth);
                }
                if (getSecMMonth == 0) {
                    getSecMMonth = 12;
                    // System.out.println("  getSecMMonth : " +getSecMMonth );
                }
                exp = strTimeMin + " " + strTime + " " + startDate[2] + "-" + "31,1-31,1-31,1-" + endDate[2] + " " +
                        startDate[1] + "," + getFirstMMonth + "," + getSecMMonth + "," + endDate[1] + " *";
    
                //  System.out.println("  expression for   month3 : " + exp);
            }
            if (ageInMonths == 2) {
                Calendar middleMonth1 = (Calendar) startCal.clone();
                middleMonth1.add(Calendar.MONTH, 1);
                //System.out.println("  get middleDate month : " + middleMonth1.get(Calendar.MONTH));
                int getMiddleMonth = middleMonth1.get(Calendar.MONTH);
                if (getMiddleMonth == 0) {
                    getMiddleMonth = 12;
                    //  System.out.println("  getMiddleMonth : " +getMiddleMonth );
                }
                //  System.out.println("  Outside getMiddleMonth : " +getMiddleMonth );
    
    
                endCal.set(Calendar.MONTH, 11);
                //System.out.println("  get middleDate month 001: " + endCal.get(Calendar.MONTH));
    
                exp = strTimeMin + " " + strTime + " " + startDate[2] + "-" + "31,1-31,1-" +
                        endDate[2] + " " + startDate[1] + "," +
                        getMiddleMonth + "," + endDate[1] + " *";
                // System.out.println("  get end  month2 : " + exp);
            } else if (ageInMonths == 1) {
    
                exp = strTimeMin + " " + strTime + " " + startDate[2] + "-31,1-" +
                        endDate[2] + " " + startDate[1] + "," + endDate[1] + " *";
                //System.out.println("  expression for  one month : " + exp);
            }
    
        } else {
    
            exp = strTimeMin + " " + strTime + " " + startDate[2] + "-" + endDate[2] + " " + endDate[1] + " *";
        }
    
        System.out.println("  expression for  before parameter : " + exp);
    
        //Run with only Start Date
        if (strRepeat != null && strRepeat.equalsIgnoreCase("No")) {
            exp = strTimeMin + " " + strTime + " " + startDate[2] + " " + startDate[1] + " *";
        } else if (strRepeat != null && strRepeat.equalsIgnoreCase("Daily")) {
            exp = exp;
        } else if (strRepeat != null && strRepeat.equalsIgnoreCase("Weekdays")) {
    
    
            // System.out.println("  expression for  weekdays before  : " + exp);
            exp = exp.replace("*", strCalDay);
            // System.out.println("  expression for  weekdays after  : " + exp);
    
    
        } else if (strRepeat != null && strRepeat.equalsIgnoreCase("Weekends")) {
    
            // System.out.println("  expression for  weekend  before  : " + exp);
            exp = exp.replace("*", "6,7");
            // System.out.println("  expression for  weekend after  : " + exp);
        }
        System.out.println(" cron expression ::: " + exp);
    

提交回复
热议问题