weekday represents a day of the week in the civil calendar
. It normally holds values in the range
0 to
6,
corresponding to Sunday through Saturday, but
it may hold non-negative values outside this range
. It can be constructed with any
unsigned value,
which will be subsequently truncated to fit into
weekday's unspecified internal storage
. [
Note 1:
weekday is not
Cpp17LessThanComparable
because there is no universal consensus on which day is the first day of the week
. weekday's arithmetic operations treat the days of the week as a circular range,
with no beginning and no end
. —
end note]
weekday is a trivially copyable and standard-layout class type
. constexpr explicit weekday(unsigned wd) noexcept;
Effects: Initializes
wd_ with
wd == 7 ? 0 : wd. The value held is unspecified if
wd is not in the range [
0, 255]
.constexpr weekday(const sys_days& dp) noexcept;
Effects: Computes what day of the week corresponds to the
sys_days dp,
and initializes that day of the week in
wd_. [
Example 1:
If
dp represents 1970-01-01,
the constructed
weekday represents Thursday
by storing
4 in
wd_. —
end example]
constexpr explicit weekday(const local_days& dp) noexcept;
Effects: Computes what day of the week corresponds to the
local_days dp,
and initializes that day of the week in
wd_. Postconditions: The value is identical to that constructed from
sys_days{dp.time_since_epoch()}. constexpr weekday& operator+() noexcept;
constexpr weekday operator+(int) noexcept;
Returns: A copy of
*this as it existed on entry to this member function
. constexpr weekday& operator-() noexcept;
constexpr weekday operator-(int) noexcept;
Returns: A copy of
*this as it existed on entry to this member function
. constexpr weekday& operator+=(const days& d) noexcept;
constexpr weekday& operator-=(const days& d) noexcept;
constexpr unsigned c_encoding() const noexcept;
constexpr unsigned iso_encoding() const noexcept;
Returns:
wd_ == 0u ? 7u : wd_. constexpr bool ok() const noexcept;
constexpr weekday_indexed operator[](unsigned index) const noexcept;
constexpr weekday_last operator[](last_spec) const noexcept;
Returns:
weekday_last{*this}. constexpr bool operator=(const weekday& x, const weekday& y) noexcept;
constexpr weekday operator+(const weekday& x, const days& y) noexcept;
Returns:
weekday{modulo(static_cast<long long>(x.wd_) + y.count(), 7)}
where
modulo(n, 7) computes the remainder of
n divided by 7 using Euclidean division
. [
Note 1:
Given a divisor of 7, Euclidean division truncates towards negative infinity and
always produces a remainder in the range of [
0, 6]
. Assuming no overflow in the signed summation,
this operation results in a
weekday holding a value in the range [
0, 6] even if
!x.ok(). —
end note]
[
Example 1:
Monday + days{6} == Sunday. —
end example]
constexpr weekday operator+(const days& x, const weekday& y) noexcept;
constexpr weekday operator-(const weekday& x, const days& y) noexcept;
constexpr days operator-(const weekday& x, const weekday& y) noexcept;
Returns: If
x.ok() == true
and
y.ok() == true,
returns a value
d
in the range [
days{0}, days{6}]
satisfying
y + d == x. Otherwise the value returned is unspecified
. [
Example 2:
Sunday - Monday == days{6}. —
end example]
template<class charT, class traits>
basic_ostream<charT, traits>&
operator<(basic_ostream<charT, traits>& os, const weekday& wd);
Effects: Equivalent to:
return os << (wd.ok() ?
format(os.getloc(), STATICALLY-WIDEN<charT>("{:L%a}"), wd) :
format(os.getloc(), STATICALLY-WIDEN<charT>("{} is not a valid weekday"),
static_cast<unsigned>(wd.wd_));
template<class charT, class traits, class Alloc = allocator<charT>>
basic_istream<charT, traits>&
from_stream(basic_istream<charT, traits>& is, const charT* fmt,
weekday& wd, basic_string<charT, traits, Alloc>* abbrev = nullptr,
minutes* offset = nullptr);
Effects: Attempts to parse the input stream
is
into the
weekday wd using
the format flags given in the NTCTS
fmt
as specified in
[time.parse]. If the parse fails to decode a valid weekday,
is.setstate(ios_base::failbit) is called and
wd 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
.