namespace std::chrono {
class month_weekday;
}
概要
month_weekday
は、未規定の年の、月の指定したN回目の曜日を表すカレンダー表現のためクラスである。
年が規定されないために、このクラスでは月の指定したN回目の曜日が何日なのかは取得できない。年情報を付加してyear_month_weekday
クラスに変換し、そこからシステム時間もしくはローカル時間に変換するか、そこからさらにyear_month_day
クラスに変換することで日を取得できる。
このクラスは等値比較ができ、EqualityComparableの要件を満たす。
このクラスは、トリビアルコピー可能で、かつスタンダードレイアウト型である。
メンバ関数
構築/コピー/破棄
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++20 |
month_weekday& operator=(const month_weekday&) = default; month_weekday& operator=(month_weekday&&) = default; |
代入演算子 | C++20 |
観測
名前 | 説明 | 対応バージョン |
---|---|---|
month |
月要素を取得する | C++20 |
weekday_indexed |
インデックス付き曜日要素を取得する | C++20 |
検証
名前 | 説明 | 対応バージョン |
---|---|---|
ok |
値が範囲に収まっているか判定する | C++20 |
非メンバ関数
カレンダー構文演算子
名前 | 説明 | 対応バージョン |
---|---|---|
operator/ |
カレンダー要素同士をつなぎ合わせる | C++20 |
比較演算
名前 | 説明 | 対応バージョン |
---|---|---|
operator== |
等値比較を行う | C++20 |
bool operator!=(const month_weekday&, const month_weekday&) noexcept; |
非等値比較を行う (== により使用可能) |
C++20 |
入出力
名前 | 説明 | 対応バージョン |
---|---|---|
operator<< |
出力ストリームに出力する | C++20 |
文字列フォーマットサポート
名前 | 説明 | 対応バージョン |
---|---|---|
formatter |
std::formatter クラスの特殊化 |
C++20 |
ハッシュサポート
名前 | 説明 | 対応バージョン |
---|---|---|
template <class T> struct hash; |
hash クラスの先行宣言 |
C++26 |
template<> struct hash<chrono::month_weekday>; |
hash クラスのmonth_weekday に対する特殊化 |
C++26 |
例
#include <iostream>
#include <chrono>
namespace chrono = std::chrono;
using namespace std::chrono_literals;
int main()
{
// すべて3月の1回目の日曜日を表す
chrono::month_weekday date1 = chrono::March/chrono::Sunday[1];
chrono::month_weekday date2 = 3/chrono::Sunday[1];
chrono::month_weekday date3 = chrono::Sunday[1]/chrono::March;
chrono::month_weekday date4 = chrono::Sunday[1]/3;
// 各カレンダー要素のコンストラクタはexplicitなので、
// 指定順は月、N回目の曜日で決まっているが、int値は指定できない
chrono::month_weekday date5{chrono::March, chrono::Sunday[1]};
chrono::month_weekday date6{chrono::month{3}, chrono::weekday_indexed{chrono::Sunday, 1}};
std::cout << date1 << std::endl;
std::cout << date2 << std::endl;
std::cout << date3 << std::endl;
std::cout << date4 << std::endl;
std::cout << date5 << std::endl;
std::cout << date6 << std::endl;
// 2020年3月の1回目の日曜日が何日かを取得する
chrono::year_month_weekday ymwd = 2020y/chrono::March/chrono::Sunday[1];
chrono::year_month_day ymd{static_cast<chrono::sys_days>(ymwd)};
std::cout << ymd << std::endl;
}
出力
Mar/Sun[1]
Mar/Sun[1]
Mar/Sun[1]
Mar/Sun[1]
Mar/Sun[1]
Mar/Sun[1]
2020/03/01
バージョン
言語
- C++20
処理系
- Clang: 8.0 (出力ストリームなし) ✅
- GCC: 11.1 (出力ストリームなし) ✅
- Visual C++: 2019 Update 3 ❌
参照
- P2592R3 Hashing support for
std::chrono
value classes- C++26でハッシュサポートが追加された