Month Date::month() const { Day d = dayOfYear(); // dayOfYear is 1 based Integer m = d/30 + 1; bool leap = isLeap(year()); while (d <= monthOffset(Month(m),leap)) --m; while (d > monthOffset(Month(m+1),leap)) ++m; return Month(m); }
Date::Date(Day d, Month m, Year y) { QL_REQUIRE(y > 1900 && y < 2200, "year " << y << " out of bound. It must be in [1901,2199]"); QL_REQUIRE(Integer(m) > 0 && Integer(m) < 13, "month " << Integer(m) << " outside January-December range [1,12]"); bool leap = isLeap(y); Day len = monthLength(m,leap), offset = monthOffset(m,leap); QL_REQUIRE(d <= len && d > 0, "day outside month (" << Integer(m) << ") day-range " << "[1," << len << "]"); serialNumber_ = d + offset + yearOffset(y); }
inline Day Date::dayOfMonth() const { return dayOfYear() - monthOffset(month(),isLeap(year())); }