/*static*/ int DateUtilities::GetDayMinAndUpdateYear(int day, int &year) { int dayMin = (int)DayFromYear(year); if (day < dayMin) { year--; dayMin = (int)DayFromYear(year); } return dayMin; }
///------------------------------------------------------------------------------ /// Get a time value from (year, mon, day, time) values. ///------------------------------------------------------------------------------ double DateUtilities::TvFromDate(double year, double mon, double day, double time) { // For positive month, use fast path: '/' and '%' rather than 'floor()' and 'fmod()'. // But make sure there is no overflow when casting double -> int -- WOOB 1142298. if (mon >= 0 && mon <= INT_MAX) { year += ((int)mon) / 12; mon = ((int)mon) % 12; } else { year += floor(mon/12); mon = DblModPos(mon,12); } day += DayFromYear(year); AssertMsg(mon >= 0 && mon <= 11, "'mon' must be in the range of [0..11]."); day += g_rgday[(int)mon]; if (mon >= 2 && !FLeap((int)year)) { day -= 1; } return day * 86400000 + time; }
static double DayFromMonth(double year, double month) { int iMonth = (int) MathUtils::floor(month); if (iMonth < 0 || iMonth >= 12) { return MathUtils::kNaN; } return DayFromYear((int)year) + kMonthOffset[(int)IsLeapYear((int)year)][iMonth]; }
static inline int DayWithinYear(double t) { return (int) (Day(t) - DayFromYear((int) YearFromTime(t))); }