Year Date::year() const { Year y = (serialNumber_ / 365)+1900; // yearOffset(y) is December 31st of the preceding year if (serialNumber_ <= yearOffset(y)) --y; return y; }
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::dayOfYear() const { return serialNumber_ - yearOffset(year()); }