/** * Convert date in form YYYY MM DD into days since the epoch, leaving * results internally. */ protected final void toOrdinal() { ordinal = toOrdinal(yyyy, mm, dd); } // end toOrdinal
/** * Find the first monday in a given month, the 3rd monday or the last * Thursday... * * @param which * 1=first 2=second 3=third 4=fourth 5=last (might be 4th or 5th) * @param dayOfWeek * 0=Sunday 1=Monday 2=Tuesday 3=Wednesday 4=Thursday 5=Friday * 6=Saturday WARNING: not compatible with 1=Calendar.SUNDAY. * @param yyyy * year of interest. * @param mm * month 1 to 12 (not 0 to 11 as in Sun's Date) * * @return day of month 1..31 */ public static int ordinalOfnthXXXDay(int which, int dayOfWeek, int yyyy, int mm) { int dayOfMonthOfNthDesiredDay = nthXXXDay(which, dayOfWeek, yyyy, mm); return BigDate.toOrdinal(yyyy, mm, dayOfMonthOfNthDesiredDay); } // end ordinalOfnthXXXDay
/** * Find the first monday in a given month, the 3rd monday or the last * Thursday... * * @param which * 1=first 2=second 3=third 4=fourth 5=last (might be 4th or 5th) * @param dayOfWeek * 0=Sunday 1=Monday 2=Tuesday 3=Wednesday 4=Thursday 5=Friday * 6=Saturday WARNING: not compatible with 1=Calendar.SUNDAY. * @param yyyy * year of interest. * @param mm * month 1 to 12 (not 0 to 11 as in Sun's Date) * * @return day of month 1..31 */ public static int nthXXXDay(int which, int dayOfWeek, int yyyy, int mm) { int dayOfWeekOf1st = BigDate.dayOfWeek(BigDate.toOrdinal(yyyy, mm, 1)); int dayOfMonthOfFirstDesiredDay = (dayOfWeek - dayOfWeekOf1st + 7) % 7 + 1; int dayOfMonthOfNthDesiredDay = dayOfMonthOfFirstDesiredDay + (which - 1) * 7; if (which >= 5 && dayOfMonthOfNthDesiredDay > daysInMonth(mm, yyyy)) { dayOfMonthOfNthDesiredDay -= 7; } return dayOfMonthOfNthDesiredDay; } // end nthXXXDay
int olddd = dd; dd = 1; toOrdinal(); ordinal += olddd - 1; toGregorian();