@Override public Date resolveDuedate(String duedateDescription, int maxIterations) { LOGGER.info("Resolving Due Date: {}", duedateDescription); String timeZone = getValueFrom("DSTZONE", duedateDescription); String version = getValueFrom("VER", duedateDescription); // START is a legacy value that is no longer used, but may still exist in deployed job schedules // Could be used in the future as a start date for a CRON job // String startDate = getValueFrom("START", duedateDescription); duedateDescription = removeValueFrom("VER", removeValueFrom("START", removeValueFrom("DSTZONE", duedateDescription))).trim(); try { LOGGER.info("Base Due Date: {}", duedateDescription); Date date = resolvers.get(version == null ? getDefaultScheduleVersion() : Integer.valueOf(version)).resolve(duedateDescription, clockReader, timeZone == null ? clockReader.getCurrentTimeZone() : TimeZone.getTimeZone(timeZone)); LOGGER.info("Calculated Date: {}", date == null ? "Will Not Run Again" : date); return date; } catch (Exception e) { throw new FlowableIllegalArgumentException("Cannot parse duration", e); } }