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;
  }