⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 periodicevent.java

📁 一个类似于openJMS分布在ObjectWeb之下的JMS消息中间件。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	      index ++;	      if (index >= maskField.length)		return true;	      return false;	    default:	      return false;	    }	  } else {	    // gets the DAY_OF_WEEK value from the reference date	    if (refDate == -1)	      return false;	    int mask[] = new int[index];	    System.arraycopy(maskField, 0, mask, 0, maskField.length);	    maskField = mask;	    maskField[index] = Calendar.DAY_OF_WEEK;	    mask = new int[index];	    System.arraycopy(maskValue, 0, mask, 0, maskValue.length);	    maskValue = mask;	    maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	    return true;	  }	default:	  return false;	}      case Calendar.WEEK_OF_YEAR:	if (fillValue) {	  if (refDate == -1)	    return false;	  maskValue[index] = calendar.get(Calendar.WEEK_OF_YEAR);	} else if (refDate != -1) {	  if (! checkField(calendar, Calendar.WEEK_OF_YEAR, maskValue[index]))	    return false;	}	index ++;	if (index < maskField.length) {	  switch (maskField[index]) {	  case Calendar.DAY_OF_WEEK:	    if (fillValue) {	      if (refDate == -1)		return false;	      maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	    } else if (refDate != -1) {	      if (! checkField(calendar, Calendar.DAY_OF_WEEK, maskValue[index]))		return false;	    }	    index ++;	    if (index >= maskField.length)	      return true;	    return false;	  default:	    return false;	  }	} else {	  // gets the DAY_OF_WEEK value from the reference date	  if (refDate == -1)	    return false;	  int mask[] = new int[index];	  System.arraycopy(maskField, 0, mask, 0, maskField.length);	  maskField = mask;	  maskField[index] = Calendar.DAY_OF_WEEK;	  mask = new int[index];	  System.arraycopy(maskValue, 0, mask, 0, maskValue.length);	  maskValue = mask;	  maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	  return true;	}      case Calendar.DAY_OF_YEAR:	if (fillValue) {	  if (refDate == -1)	    return false;	  maskValue[index] = calendar.get(Calendar.DAY_OF_YEAR);	} else if (refDate != -1) {	  if (! checkField(calendar, Calendar.DAY_OF_YEAR, maskValue[index]))	    return false;	}	index ++;	if (index >= maskField.length)	  return true;	return false;      }      break;    case Calendar.MONTH:      switch (maskField[index]) {      case Calendar.WEEK_OF_MONTH:	if (fillValue) {	  if (refDate == -1)	    return false;	  maskValue[index] = calendar.get(Calendar.WEEK_OF_MONTH);	} else if (refDate != -1) {	  if (! checkField(calendar, Calendar.WEEK_OF_MONTH, maskValue[index]))	    return false;	}	index ++;	if (index < maskField.length) {	  switch (maskField[index]) {	  case Calendar.DAY_OF_WEEK:	    if (fillValue) {	      if (refDate == -1)		return false;	      maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	    } else if (refDate != -1) {	      if (! checkField(calendar, Calendar.DAY_OF_WEEK, maskValue[index]))		return false;	    }	    index ++;	    if (index >= maskField.length)	      return true;	    return false;	  default:	    return false;	  }	} else {	  // gets the DAY_OF_WEEK value from the reference date	  if (refDate == -1)	    return false;	  int mask[] = new int[index];	  System.arraycopy(maskField, 0, mask, 0, maskField.length);	  maskField = mask;	  maskField[index] = Calendar.DAY_OF_WEEK;	  mask = new int[index];	  System.arraycopy(maskValue, 0, mask, 0, maskValue.length);	  maskValue = mask;	  maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	  return true;	}      case Calendar.DAY_OF_MONTH:	if (fillValue) {	  if (refDate == -1)	    return false;	  maskValue[index] = calendar.get(Calendar.DAY_OF_MONTH);	} else if (refDate != -1) {	  if (! checkField(calendar, Calendar.DAY_OF_MONTH, maskValue[index]))	    return false;	}	index ++;	if (index >= maskField.length)	  return true;	return false;      case Calendar.DAY_OF_WEEK_IN_MONTH:	if (fillValue) {	  if (refDate == -1)	    return false;	  maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK_IN_MONTH);	} else if (refDate != -1) {	  if (! checkField(calendar, Calendar.DAY_OF_WEEK_IN_MONTH, maskValue[index]))	    return false;	}	index ++;	if (index < maskField.length) {	  switch (maskField[index]) {	  case Calendar.DAY_OF_WEEK:	    if (fillValue) {	      if (refDate == -1)		return false;	      maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	    } else if (refDate != -1) {	      if (! checkField(calendar, Calendar.DAY_OF_WEEK, maskValue[index]))		return false;	    }	    index ++;	    if (index >= maskField.length)	      return true;	    return false;	  default:	    return false;	  }	} else {	  // gets the DAY_OF_WEEK value from the reference date	  if (refDate == -1)	    return false;	  int mask[] = new int[index];	  System.arraycopy(maskField, 0, mask, 0, maskField.length);	  maskField = mask;	  maskField[index] = Calendar.DAY_OF_WEEK;	  mask = new int[index];	  System.arraycopy(maskValue, 0, mask, 0, maskValue.length);	  maskValue = mask;	  maskValue[index] = calendar.get(Calendar.DAY_OF_WEEK);	  return true;	}      default:	return false;      }    default:      // when period is the day or lower, no mask is allowed      return false;    }    // not reached    return false;  }  /**   * Provides a string image for this object.   *   * @return	string image for this object   */  public String toString() {    StringBuffer output = new StringBuffer();    output.append("(");    output.append(super.toString());    output.append(",timeZoneId=");    Strings.toString(output, timeZoneId);    output.append(",refDate=");    output.append(refDate);    if (refDate > 0) {      output.append("(");      output.append(DateFormat.getDateTimeInstance().format(	new Date(refDate)));      output.append(")");    }    output.append(",period=");    output.append(period);    output.append(",maskField=");    Strings.toStringArray(output, maskField);    output.append(",maskValue=");    Strings.toStringArray(output, maskValue);    output.append(")");    return output.toString();  }  /**   * Applies the mask on the calendar.   */  protected void applyMask() {    if (maskField == null)      return;    int lastDayInMonth = 0;    for (int i = 0; i < maskField.length; i ++) {      // negative values for DAY_OF_MONTH are not handled by the Calendar      if ((maskField[i] == Calendar.DAY_OF_MONTH) &&	  (maskValue[i] < 0)) {	lastDayInMonth = maskValue[i];	calendar.set(Calendar.DAY_OF_MONTH, 33);      } else {	calendar.set(maskField[i], maskValue[i]);      }    }    if (lastDayInMonth != 0) {      // resolve the calendar date.//    calendar.getTime();      // Work-around calendar jdk1.4 bug (Id: 4685354).      calendar.get(Calendar.MONTH);      calendar.set(Calendar.DAY_OF_MONTH, lastDayInMonth + 1);    }  }  /**   * Checks that the calendar conforms to the mask.   */  protected boolean checkMask() {    if (maskField == null)      return true;    for (int i = 0; i < maskField.length; i ++) {      if ((maskValue[i] > 0) &&	  (calendar.get(maskField[i]) != maskValue[i]))	return false;    }    return true;  }  /**   * Gets the next event date after the parameter date. Returns   * <code>-1</code> if there is no such date.   *   * @param now   *	starting date for the lookup   * @param inclusive   *	if <code>true</code> checks <code>now</code> as an answer   * @return   *	the next event date after now,   *	<code>-1</code> if there is no such date   */  public long getNextDate(long now, boolean inclusive) {    return getNextDate(now, 1, inclusive);  }  /**   * Gets the next event date after the parameter date. Returns   * <code>-1</code> if there is no such date.   * Calls {@link getNextDate(long, boolean) getNextDate} with the   * <code>inclusive</code> parameter set to <code>false</code>.   *   * @param now   *	starting date for the lookup   * @return   *	the next event date after now,   *	<code>-1</code> if there is no such date   */  public long getNextDate(long now) {    return getNextDate(now, false);  }  /**   * Gets the last event date before the parameter date. Returns   * <code>-1</code> if there is no such date.   *   * @param now   *	starting date for the backward lookup   * @param inclusive   *	if <code>true</code> checks <code>now</code> as an answer   * @return   *	the last event date before now,   *	<code>-1</code> if there is no such date   */  public long getLastDate(long now, boolean inclusive) {    return getNextDate(now, -1, inclusive);  }  /**   * Gets the last event date before the parameter date. Returns   * <code>-1</code> if there is no such date.   * Calls {@link getLastDate(long, boolean) getLastDate} with the   * <code>inclusive</code> parameter set to <code>false</code>.   *   * @param now   *	starting date for the backward lookup   * @return   *	the last event date before now,   *	<code>-1</code> if there is no such date   */  public long getLastDate(long now) {    return getLastDate(now, false);  }  /**   * Gets the next event date before or after the parameter date. Returns   * <code>-1</code> if there is no such date.   *   * @param now   *	starting date for the lookup   * @param dir   *	direction of lookup, forward when positive, backward when negative   * @param inclusive   *	if <code>true</code> checks <code>now</code> as an answer   * @return   *	the next event date before/after now,   *	<code>-1</code> if there is no such date   */  private long getNextDate(long now, int dir, boolean inclusive) {    if (dir == 0)      return -1;    if (dir > 0)      dir = 1;    else      dir = -1;    if (refDate == -1)      return -1;    // the calendar date is always set to the reference date, which is    // a valid event date, or to the last valid event date returned    long date = calendar.getTime().getTime();    if (inclusive && (date == now))      return date;    if (period.value == 0)      return -1;    Calendar clone = (Calendar) calendar.clone();    // gets a rough estimate of the number of periods between date and now    long pnum = now - date;    int sign = 1;    if (pnum > 0) {      sign = dir;    } else {      pnum = -pnum;      sign = -dir;    }    switch (period.unit) {    case Calendar.YEAR:      pnum /= 12;    case Calendar.MONTH:      pnum /= 30;    case Calendar.DAY_OF_MONTH:      pnum /= 24;    case Calendar.HOUR_OF_DAY:      pnum /= 60;    case Calendar.MINUTE:      pnum /= 60;    case Calendar.SECOND:      pnum /= 1000;    }    pnum /= period.value;    // tries to skip a large period    pnum_loop:    while (pnum > 3) {      calendar.add(period.unit, (int) (pnum * period.value * dir * sign));      // sets all fields before evaluating the calendar      applyMask();      if (! checkMask()) {	// this is not a valid event date	calendar = clone;	clone = (Calendar) calendar.clone();	pnum --;	continue pnum_loop;      }      // this is a valid event date      clone = (Calendar) calendar.clone();      break pnum_loop;    }    date = calendar.getTime().getTime();    if (now == date) {      if (inclusive)	return date;      sign = 1;    } else if (now > date) {      sign = dir;    } else {      sign = -dir;    }    pnum = 1;    main_loop:    while (true) {      calendar.add(period.unit, (int) (pnum * period.value * dir * sign));      applyMask();      date = calendar.getTime().getTime();      if ((sign == -1) &&	  ((((date - now) * dir) < 0) ||	   (!inclusive && (date == now)))) {	calendar = clone;	return calendar.getTime().getTime();      }      if (! checkMask()) {	// this is not a valid event date	calendar = clone;	clone = (Calendar) calendar.clone();	pnum ++;	continue main_loop;      }      // this is a valid event date      if ((sign == 1) &&	  ((((date - now) * dir) > 0) ||	   (inclusive && (date == now)))) {	return date;      }      clone = (Calendar) calendar.clone();      pnum = 1;    }    // never reached  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -