weekday

表示公历中的星期几。 例如,星期二。

语法

class weekday; // C++20

备注

weekday 可以保留值 [0, 255],但通常保留值 [0, 6] 来表示星期几。 有关可与 weekday 类一起使用的常量,请参阅下面的工作日常量

成员

名称 说明
构造函数 构造 weekday
c_encoding 获取 weekday 值。
iso_encoding 获取 ISO 8601 weekday 值。
ok 检查 weekday 值是否有效。
operator++ 递增 weekday
operator+= 将此 weekday 增加指定的工作日数。
operator-- 递减 weekday
operator-= 从此 weekday 减去指定的工作日数。
operator[] 从此 weekday 创建 weekday_indexedweekday_last

非成员

“属性” 描述
from_stream 使用指定格式从给定流分析 weekday
operator+ 将此 weekday 增加指定的工作日数。
operator- 从此 weekday 减去指定的工作日数,或查找两个 weekday 对象的差异。
operator== 确定两个 weekday 对象是否相等。
operator<< weekday 输出到流。

要求

标头:<chrono>自 C++20 起

命名空间std::chrono

编译器选项: /std:c++latest

构造函数

构造一个 weekday

1) weekday() = default; // C++20
2) explicit constexpr weekday(unsigned wd) noexcept; // C++20
3) constexpr weekday(const sys_days& dp) noexcept; // C++20
4) explicit constexpr weekday(const local_days& dp) noexcept; // C++20

参数

dp
使用一周中的某天 dp 构造 weekday

wd
构造 weekday,其中值为 wd

注解

1) 默认构造函数不初始化工作日值。
2) 使用指定值构造 weekday
如果 wd 为 7,则 weekday 是使用值 0 构造的。
不要使用超过 255 的值进行初始化,否则生成的 weekday 将具有未指定的值。
3) 计算与 std::chrono::sys_daysdp 相对应的一周中的某天,并使用这一天构造 weekday
4) 计算与 std::chrono::local_daysdp 相对应的一周中的某天,并使用这一天构造 weekday。 它的行为如同使用 weekday(std::chrono::sys_days(dp.time_since_epoch())) 创建 weekday

示例:创建 weekday

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std::chrono;

int main()
{
    weekday wd{ Wednesday };
    weekday wd2{ 3 };
    std::cout << wd << '\n' << wd2;
    
    return 0;
}
Wednesday
Wednesday

c_encoding

constexpr unsigned c_encoding() const noexcept;

返回值

工作日值。

iso_encoding

根据 ISO 8601,工作日值被解释为 7,但使用星期日 (0)。

constexpr unsigned iso_encoding() const noexcept;

返回值

工作日值。

ok

检查存储在此 weekday 中的值是否位于有效范围内。

constexpr bool is_leap() const noexcept;

返回值

如果工作日值在范围 [0, 6] 内,则为 true。 否则为 false

operator++

将工作日值增加 1。

1) constexpr std::chrono::weekday& operator++() noexcept;
2) constexpr std::chrono::weekday operator++(int) noexcept;

返回值

1) 对递增“后”(后缀递增)的 *this weekday 的引用。
2) 递增前(前缀递增)的 weekday 的副本

示例: operator++

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std;
using namespace std::chrono;

int main()
{
    std::chrono::weekday wd{Thursday};

    std::cout << wd << " " << ++wd << "\n"; // constexpr weekday& operator++() noexcept
    std::cout << wd << " " << wd++ << "\n"; // constexpr weekday operator++(int) noexcept
    std::cout << wd << "\n";

    return 0;
}
Thu Fri
Fri Fri
Sat

备注

递增值为模数 7。 它将始终在范围 [0, 6] 内。

operator--

weekday 值减去 1。

1) constexpr std::chrono::weekday& operator--() noexcept;
2) constexpr std::chrono::weekday operator--(int) noexcept;

返回值

1) *this weekday 在递减后 引用(后缀递减)。
2) 递减前的副本weekday(前缀递减)。

示例: operator--

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std;
using namespace std::chrono;

int main()
{
    weekday y = weekday{Thursday};

    cout << y << " " << --y << "\n"; // constexpr weekday& operator--() noexcept
    cout << y << " " << y-- << "\n"; // constexpr weekday operator--(int) noexcept
    cout << y << "\n";

    return 0;
}
Thu Wed
Wed Wed
Tue

备注

如果递减的结果小于 0,则它设置为 6。

operator+=

将天数增加到 weekday

constexpr weekday& operator+=(const days& d) noexcept;

参数

*d*
要添加的天数。

返回值

*this + d 的值。 结果将为范围 [0, 6] 内的模数 7。

operator-=

weekday 减去天数。

constexpr weekday& operator-=(const days& d) noexcept;

参数

*d*
要减去的天数。

返回值

*this - d 的值。 结果将为范围 [0, 6] 内的模数 7。

operator[]

从此 weekday 创建 weekday_indexedweekday_last

1) std::chrono::weekday_indexed(*this, index) // C++20
2) std::chrono::weekday_last(*this) // C++20

返回值

1) std::chrono::weekday_indexed(*this, index)
2) std::chrono::weekday_last(*this)

示例: operator[]

// compile using: /std:c++latest
#include <iostream>
#include <chrono>

using namespace std;
using namespace std::chrono;

int main()
{
    constexpr auto firstMondayInJanuary =
        year_month_day{ Monday[2] / January / 2021y };

    std::cout << firstMondayInJanuary << "\n";

    constexpr auto lastMondayInJanuary = 
        year_month_day{ Tuesday[last] / January / 2021y };
    std::cout << lastMondayInJanuary << "\n";
}
2021-01-11
2021-01-26

工作日常量

(C++20) <chrono> 标头定义了以下常量,这些常量与 weekday 一起使用,可更方便地使用代码、增大代码类型的安全性和提高代码的可维护性。 当 std::chrono 在范围内时,这些常量就在范围内。

// Calendrical constants
inline constexpr std::chrono::weekday Sunday{0};
inline constexpr std::chrono::weekday Monday{1};
inline constexpr std::chrono::weekday Tuesday{2};
inline constexpr std::chrono::weekday Wednesday{3};
inline constexpr std::chrono::weekday Thursday{4};
inline constexpr std::chrono::weekday Friday{5};
inline constexpr std::chrono::weekday Saturday{6};

另请参阅

weekday_last
weekday_indexed
<chrono>
头文件引用