最終更新日時: 2026年04月07日 22時48分01秒 (JST)
suomesta が更新

履歴 編集

class
<chrono>

# std::chrono::weekday(C++20)

    namespace std::chrono {
      class weekday;
    }

## 概要

`weekday`は、曜日を表すカレンダー表現のためクラスである。

日曜日から土曜日までを値の範囲`[0, 6]`として扱うが、このクラスではその範囲外の非負の値を扱える。

このクラスは等値比較ができ、EqualityComparableの要件を満たす。しかし、週の最初の曜日について (日曜日か月曜日か) 合意が得られないため大小比較はできず、LessThanComparable要件は満たさない。

このクラスは、トリビアルコピー可能で、かつスタンダードレイアウト型である。

## メンバ関数

### 構築／コピー／破棄

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++20
`weekday& operator=(const weekday&) = default;` `weekday& operator=(weekday&&) = default;` | 代入演算子 | C++20

### 算術演算

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator++` | インクリメント | C++20
`operator--` | デクリメント | C++20
`operator+=` | 加算の複合代入 | C++20
`operator-=` | 減算の複合代入 | C++20

### 変換

名前 | 説明 | 対応バージョン
--- | --- | ---
`c_encoding` | C / C++仕様に基づいた曜日の整数値を取得する | C++20
`iso_encoding` | ISO 8601に基づいた曜日の整数値を取得する | C++20

### 検証

名前 | 説明 | 対応バージョン
--- | --- | ---
`ok` | 値が範囲に収まっているか判定する | C++20

### 月のN回目の曜日

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator[]` | 月のN回目の指定した曜日を取得する | C++20

## 非メンバ関数

### 算術演算

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator+` | 加算 | C++20
`operator-` | 減算 | C++20

### 比較演算

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator==` | 等値比較を行う | C++20
`bool operator!=(const weekday&, const weekday&) noexcept;` | 非等値比較を行う (`==`により使用可能) | C++20

### 入出力

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator<<` | 出力ストリームに出力する | C++20
`from_stream` | フォーマット指定して入力ストリームから入力する | C++20

## 文字列フォーマットサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`formatter` | `std::formatter`クラスの特殊化 | C++20

## ハッシュサポート

名前 | 説明 | 対応バージョン
--- | --- | ---
`template <class T> struct hash;` | `hash`クラスの先行宣言 | C++26
`template<> struct hash<chrono::weekday>;` | `hash`クラスの`weekday`に対する特殊化 | C++26

## 例

    #include <cassert>
    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;

    int main() {
      chrono::weekday w = chrono::Sunday;
      ++w;
      std::cout << w << std::endl;

      chrono::weekday v = chrono::Wednesday;
      v += chrono::days{3};
      std::cout << v << std::endl;

      // 曜日は循環する
      chrono::weekday u = chrono::Saturday;
      u += chrono::days{2};
      assert(u == chrono::Monday);
    }

### 出力

    Mon
    Sat

## バージョン

### 言語

- C++20

### 処理系

- Clang: 8.0 (入出力ストリームなし) ✅
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌

## 関連項目

- 曜日の定数

## 参照

- P2592R3 Hashing support for `std::chrono` value classes
  - C++26でハッシュサポートが追加された