Sumit Paliwal
Sumit Paliwal

Reputation: 395

Cron expression with start and end time

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 this is writing 3 different cron expressions like this:

0 15-59 10 * * *
0 * 11-17 * * *
0 0-35 17 * * *

Is there any possible way to write this in one single cron expression ?

Upvotes: 6

Views: 17617

Answers (3)

sapan prajapati
sapan prajapati

Reputation: 1734

There is no other way to achieve it using single crone expression but to specify multiple crone expressions for specific startDate and endDate. There is a slight modification in second crone expression though (highlighted one)

0 15-59 10 * * * (Every minute between 10:15 AM and 10:59 AM)

0 * 11-16 * * * (Every minute, between 11:00 AM and 04:59 PM)

0 0-35 17 * * * (Every minute between 05:00 PM and 05:35 PM)

Upvotes: 3

Chetan
Chetan

Reputation: 1

   HashMap<String, String> 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);

Upvotes: 0

mojtaba rajabi
mojtaba rajabi

Reputation: 1

Quartz Scheduler c# run job between to hours

use corn mask:

        ITrigger trigger_1 = TriggerBuilder.Create()
            .ForJob("YOUR_JOB")
            .WithIdentity("trigger_1")
            .StartAt(startTime)
            .WithCronSchedule("0 0/1 8-13 ? *   SUN,MON,TUE,WED,SAT *")
            .Build();

use Quartz Schedule:

trigger_1 = TriggerBuilder
            .Create()
            .ForJob("YOUR_JOB")
            .WithIdentity("trigger_1")
            .StartAt(startTime)
            .WithDailyTimeIntervalSchedule(c => c
                .OnEveryDay()
                .WithIntervalInMinutes(1).WithRepeatCount(1)
                .StartingDailyAt(new TimeOfDay(08, 30))
                .EndingDailyAt(new TimeOfDay(12, 30))
            )
            .Build();

Upvotes: 0

Related Questions