Uploaded image for project: 'ActiveMQ Classic'
  1. ActiveMQ Classic
  2. AMQ-6327

getNextScheduledTime() returns incorrect time when working with day of month

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 5.12.0, 5.13.3
    • 5.14.6, 5.15.3, 5.16.0
    • Broker
    • None

    Description

      Given the following code

      DateFormat format = new SimpleDateFormat("yyyy/MM/dd");
      
      try {
        // cron, currentDate, expectedDate
        String[][] tests = new String[][]{
          { "0 0 1 * *", "2016/04/15", "2016/05/01" },
          { "0 0 1,15 * *", "2016/04/15", "2016/05/01" },
          { "0 0 1 * *", "2016/05/15", "2016/06/01" },
          { "0 0 1,15 * *", "2016/05/15", "2016/06/01" },
          { "0 0 1 * *", "2016/06/15", "2016/07/01" },
          { "0 0 1,15 * *", "2016/06/15", "2016/07/01" },
        };
      
        String cron;
        Date currentDate;
        Date expectedDate;
        Date nextDate;
      
        for (int i = 0; i < tests.length; i++) {
          cron = tests[i][0];
          currentDate = format.parse(tests[i][1]);
          expectedDate = format.parse(tests[i][2]);
          nextDate = new Date(CronParser.getNextScheduledTime(cron, currentDate.getTime()));
          System.out.println(String.format("CronParser.getNextScheduledTime('%s', '%s') == '%s' // Expected: '%s'", cron, currentDate, nextDate, expectedDate));
        }
      } catch (Exception e) {
        e.printStackTrace();
      }
      

      The output is

      CronParser.getNextScheduledTime('0 0 1 * *', 'Fri Apr 15 00:00:00 UTC 2016') == 'Wed Jun 01 00:00:00 UTC 2016' // Expected: 'Sun May 01 00:00:00 UTC 2016'
      CronParser.getNextScheduledTime('0 0 1,15 * *', 'Fri Apr 15 00:00:00 UTC 2016') == 'Sun May 15 00:00:00 UTC 2016' // Expected: 'Sun May 01 00:00:00 UTC 2016'
      CronParser.getNextScheduledTime('0 0 1 * *', 'Sun May 15 00:00:00 UTC 2016') == 'Wed Jun 01 00:00:00 UTC 2016' // Expected: 'Wed Jun 01 00:00:00 UTC 2016'
      CronParser.getNextScheduledTime('0 0 1,15 * *', 'Sun May 15 00:00:00 UTC 2016') == 'Wed Jun 01 00:00:00 UTC 2016' // Expected: 'Wed Jun 01 00:00:00 UTC 2016'
      CronParser.getNextScheduledTime('0 0 1 * *', 'Wed Jun 15 00:00:00 UTC 2016') == 'Mon Aug 01 00:00:00 UTC 2016' // Expected: 'Fri Jul 01 00:00:00 UTC 2016'
      CronParser.getNextScheduledTime('0 0 1,15 * *', 'Wed Jun 15 00:00:00 UTC 2016') == 'Fri Jul 15 00:00:00 UTC 2016' // Expected: 'Fri Jul 01 00:00:00 UTC 2016'
      

      When given 1 for the day of month it's returning 1 month to many every other month
      When given 1,15 for the day of month it's returning the correct month but incorrect day of month every other month

      I've tested this on both v5.12.0 and v5.13.3

      Attachments

        Activity

          People

            hadrian Hadrian Zbarcea
            hathvi Justin Novak
            Votes:
            0 Vote for this issue
            Watchers:
            6 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: