private Calendar getTriggerTimeForDay(int trigId, TimeTrigDesc trigDesc, int dayOffset) { Calendar target = Calendar.getInstance(); target.add(Calendar.DAY_OF_YEAR, dayOffset); String dayStr = TimeTrigDesc.getDayOfWeekString(target.get(Calendar.DAY_OF_WEEK)); if (!trigDesc.doesRepeatOnDay(dayStr)) { return null; } if (dayOffset == 0) { return getTriggerTimeForToday(trigId, trigDesc); } target.set(Calendar.SECOND, 0); if (!trigDesc.isRandomized()) { target.set(Calendar.HOUR_OF_DAY, trigDesc.getTriggerTime().getHour()); target.set(Calendar.MINUTE, trigDesc.getTriggerTime().getMinute()); } else { target.set(Calendar.HOUR_OF_DAY, trigDesc.getRangeStart().getHour()); target.set(Calendar.MINUTE, trigDesc.getRangeStart().getMinute()); int diff = trigDesc.getRangeStart().differenceInMinutes(trigDesc.getRangeEnd()); Random rand = new Random(); // Generate a random number (both ranges inclusive) target.add(Calendar.MINUTE, rand.nextInt(diff + 1)); } return target; }