Esempio n. 1
0
  /**
   * Returns the date that falls on the specified day-of-the-week and is CLOSEST to the base date.
   *
   * @param targetDOW a code for the target day-of-the-week.
   * @param base the base date.
   * @return the date that falls on the specified day-of-the-week and is CLOSEST to the base date.
   */
  public static SerialDate getNearestDayOfWeek(final int targetDOW, final SerialDate base) {

    // check arguments...
    if (!SerialDate.isValidWeekdayCode(targetDOW)) {
      throw new IllegalArgumentException("Invalid day-of-the-week code.");
    }

    // find the date...
    final int baseDOW = base.getDayOfWeek();
    int adjust = -Math.abs(targetDOW - baseDOW);
    if (adjust >= 4) {
      adjust = 7 - adjust;
    }
    if (adjust <= -4) {
      adjust = 7 + adjust;
    }
    return SerialDate.addDays(adjust, base);
  }
Esempio n. 2
0
  /**
   * Returns the earliest date that falls on the specified day-of-the-week and is AFTER the base
   * date.
   *
   * @param targetWeekday a code for the target day-of-the-week.
   * @param base the base date.
   * @return the earliest date that falls on the specified day-of-the-week and is AFTER the base
   *     date.
   */
  public static SerialDate getFollowingDayOfWeek(final int targetWeekday, final SerialDate base) {

    // check arguments...
    if (!SerialDate.isValidWeekdayCode(targetWeekday)) {
      throw new IllegalArgumentException("Invalid day-of-the-week code.");
    }

    // find the date...
    final int adjust;
    final int baseDOW = base.getDayOfWeek();
    if (baseDOW > targetWeekday) {
      adjust = 7 + Math.min(0, targetWeekday - baseDOW);
    } else {
      adjust = Math.max(0, targetWeekday - baseDOW);
    }

    return SerialDate.addDays(adjust, base);
  }