/** * Initializes a {@link YearMonthDay} from the provided values. * * @param year The year. * @param month The month of the year (in the range 1 through 12) * @param day The day of the month (in the range 1 through the number of days in {@code month}) * @exception ArgumentException Thrown when the {@code year}, {@code month}, or {@code day} is * outside of its acceptable range. */ public YearMonthDay(int year, int month, int day) { if (isValidDate(year, month, day)) { // fields are stored zero-indexed m_year = year - 1; m_month = month - 1; m_day = day - 1; } else { throw new ArgumentException(CesiumLocalization.getYearMonthDayInvalidArgument()); } }
/** * Initializes a {@link YearMonthDay} from the provided values. * * @param year The year. * @param dayOfYear The day of the year (in the range 1 through the number of days in the year). */ public YearMonthDay(int year, int dayOfYear) { if (dayOfYear <= daysInYear(year)) { // year is stored zero-indexed m_year = year - 1; int[] cumulativeDays = isLeapYear(year) ? s_leapYearCumulativeMonthTable : s_commonYearCumulativeMonthTable; // month is stored zero-indexed for (m_month = 11; m_month > 0; --m_month) { if (cumulativeDays[m_month] < dayOfYear) { break; } } // day is stored zero-indexed m_day = dayOfYear - cumulativeDays[m_month] - 1; if (!isValidDate(m_year + 1, m_month + 1, m_day + 1)) { throw new ArgumentException(CesiumLocalization.getYearMonthDayInvalidArgument()); } } else { throw new ArgumentException(CesiumLocalization.getYearMonthDayInvalidArgument()); } }
/** * Initializes a {@link YearMonthDay} in the Gregorian calendar from the provided astronomical * Julian day number, assuming the beginning of the Julian day (noon). * * @param astronomicalJulianDayNumber The astronomical Julian day number. */ @CS2JWarning("Unhandled attribute removed: SuppressMessage") public YearMonthDay(int astronomicalJulianDayNumber) { // Algorithm from page 604 of the Explanatory Supplement to the // Astronomical Almanac (Seidelmann 1992). int L = astronomicalJulianDayNumber + 68569; int N = 4 * L / 146097; L = L - (146097 * N + 3) / 4; int I = (4000 * (L + 1)) / 1461001; L = L - (1461 * I) / 4 + 31; int J = (80 * L) / 2447; m_day = L - (2447 * J) / 80; L = J / 11; m_month = J + 2 - 12 * L; m_year = 100 * (N - 49) + I + L; m_year--; m_month--; m_day--; if (!isValidDate(m_year + 1, m_month + 1, m_day + 1)) { throw new ArgumentOutOfRangeException(CesiumLocalization.getYearMonthDayInvalidArgument()); } }