You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@activemq.apache.org by "Justin Novak (JIRA)" <ji...@apache.org> on 2016/06/16 22:13:05 UTC

[jira] [Created] (AMQ-6327) getNextScheduledTime() returns incorrect time when working with day of month

Justin Novak created AMQ-6327:
---------------------------------

             Summary: getNextScheduledTime() returns incorrect time when working with day of month
                 Key: AMQ-6327
                 URL: https://issues.apache.org/jira/browse/AMQ-6327
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.13.3, 5.12.0
            Reporter: Justin Novak


Given the following code

{code:java}
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();
}
{code}

The output is
{code}
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'
{code}

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 current month but incorrect day of month every other month

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





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)