[time.cal.ym] (original) (raw)

30 Time library [time]

30.8 The civil calendar [time.cal]

30.8.13 Class year_month [time.cal.ym]

30.8.13.1 Overview [time.cal.ym.overview]

namespace std::chrono { class year_month { chrono::year y_; chrono::month m_; public: year_month() = default;constexpr year_month(const chrono::year& y, const chrono::month& m) noexcept;constexpr chrono::year year() const noexcept;constexpr chrono::month month() const noexcept;constexpr year_month& operator+=(const months& dm) noexcept;constexpr year_month& operator-=(const months& dm) noexcept;constexpr year_month& operator+=(const years& dy) noexcept;constexpr year_month& operator-=(const years& dy) noexcept;constexpr bool ok() const noexcept;};}

year_month represents a specific month of a specific year, but with an unspecified day.

year_month is a field-based time point with a resolution of months.

year_month is a trivially copyable and standard-layout class type.

30.8.13.2 Member functions [time.cal.ym.members]

constexpr year_month(const chrono::year& y, const chrono::month& m) noexcept;

Effects: Initializes y_ with y, and m_ with m.

constexpr chrono::year year() const noexcept;

constexpr chrono::month month() const noexcept;

constexpr year_month& operator+=(const months& dm) noexcept;

Constraints: If the argument supplied by the caller for the months parameter is convertible to years, its implicit conversion sequence to yearsis worse than its implicit conversion sequence tomonths ([over.ics.rank]).

Effects: *this = *this + dm.

constexpr year_month& operator-=(const months& dm) noexcept;

Constraints: If the argument supplied by the caller for the months parameter is convertible to years, its implicit conversion sequence to yearsis worse than its implicit conversion sequence tomonths ([over.ics.rank]).

Effects: *this = *this - dm.

constexpr year_month& operator+=(const years& dy) noexcept;

Effects: *this = *this + dy.

constexpr year_month& operator-=(const years& dy) noexcept;

Effects: *this = *this - dy.

constexpr bool ok() const noexcept;

Returns: y_.ok() && m_.ok().

30.8.13.3 Non-member functions [time.cal.ym.nonmembers]

constexpr bool operator==(const year_month& x, const year_month& y) noexcept;

Returns: x.year() == y.year() && x.month() == y.month().

constexpr strong_ordering operator<=>(const year_month& x, const year_month& y) noexcept;

Effects: Equivalent to:if (auto c = x.year() <=> y.year(); c != 0) return c;return x.month() <=> y.month();

constexpr year_month operator+(const year_month& ym, const months& dm) noexcept;

Constraints: If the argument supplied by the caller for the months parameter is convertible to years, its implicit conversion sequence to yearsis worse than its implicit conversion sequence tomonths ([over.ics.rank]).

Returns: A year_month value z such that z.ok() && z - ym == dmis true.

Complexity: with respect to the value of dm.

constexpr year_month operator+(const months& dm, const year_month& ym) noexcept;

Constraints: If the argument supplied by the caller for the months parameter is convertible to years, its implicit conversion sequence to yearsis worse than its implicit conversion sequence tomonths ([over.ics.rank]).

constexpr year_month operator-(const year_month& ym, const months& dm) noexcept;

Constraints: If the argument supplied by the caller for the months parameter is convertible to years, its implicit conversion sequence to yearsis worse than its implicit conversion sequence tomonths ([over.ics.rank]).

constexpr months operator-(const year_month& x, const year_month& y) noexcept;

Returns: x.year() - y.year() + months{static_cast<int>(unsigned{x.month()}) - static_cast<int>(unsigned{y.month()})}

constexpr year_month operator+(const year_month& ym, const years& dy) noexcept;

Returns: (ym.year() + dy) / ym.month().

constexpr year_month operator+(const years& dy, const year_month& ym) noexcept;

constexpr year_month operator-(const year_month& ym, const years& dy) noexcept;

template<class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const year_month& ym);

Effects: Equivalent to:return os << format(os.getloc(), _STATICALLY-WIDEN_<charT>("{}/{:L}"), ym.year(), ym.month());

template<class charT, class traits, class Alloc = allocator<charT>> basic_istream<charT, traits>& from_stream(basic_istream<charT, traits>& is, const charT* fmt, year_month& ym, basic_string<charT, traits, Alloc>* abbrev = nullptr, minutes* offset = nullptr);

Effects: Attempts to parse the input stream isinto the year_month ym using the format flags given in the NTCTS fmtas specified in [time.parse].

If the parse fails to decode a valid year_month,is.setstate(ios_base​::​failbit) is called andym is not modified.

If %Z is used and successfully parsed, that value will be assigned to *abbrev if abbrev is non-null.

If %z (or a modified variant) is used and successfully parsed, that value will be assigned to *offset if offset is non-null.