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_indexed 或 weekday_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_days
值 dp
相对应的一周中的某天,并使用这一天构造 weekday
。
4) 计算与 std::chrono::local_days
值 dp
相对应的一周中的某天,并使用这一天构造 weekday
。 它的行为如同使用 weekday(std::chrono::sys_days(dp.time_since_epoch()))
创建 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
constexpr unsigned c_encoding() const noexcept;
工作日值。
根据 ISO 8601,工作日值被解释为 7,但使用星期日 (0)。
constexpr unsigned iso_encoding() const noexcept;
工作日值。
检查存储在此 weekday
中的值是否位于有效范围内。
constexpr bool is_leap() const noexcept;
如果工作日值在范围 [0, 6] 内,则为 true
。 否则为 false
。
将工作日值增加 1。
1) constexpr std::chrono::weekday& operator++() noexcept;
2) constexpr std::chrono::weekday operator++(int) noexcept;
1) 对递增“后”(后缀递增)的 *this
weekday 的引用。
2) 递增前(前缀递增)的 weekday
的副本。
// 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] 内。
从 weekday
值减去 1。
1) constexpr std::chrono::weekday& operator--() noexcept;
2) constexpr std::chrono::weekday operator--(int) noexcept;
1) *this
weekday
在递减后 引用(后缀递减)。
2) 递减前的副本weekday
(前缀递减)。
// 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。
将天数增加到 weekday
。
constexpr weekday& operator+=(const days& d) noexcept;
*d*
要添加的天数。
*this + d
的值。 结果将为范围 [0, 6] 内的模数 7。
从 weekday
减去天数。
constexpr weekday& operator-=(const days& d) noexcept;
*d*
要减去的天数。
*this - d
的值。 结果将为范围 [0, 6] 内的模数 7。
从此 weekday
创建 weekday_indexed 或 weekday_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)
// 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};