最終更新日時: 2024年12月11日 11時53分37秒 (JST)
Koichi Murase が更新

履歴 編集

class
<chrono>

# std::formatter(C++20)

    namespace std {
      template <class charT>
      struct formatter<chrono::year, charT>;
    }

## 概要

`year`クラスに対する`std::formatter`クラステンプレートの特殊化。

フォーマットフラグとしては、以下を使用できる：

フォーマットフラグ | 説明
--- | ---
`%C` | 100で切り下げ除算した2桁0埋め10進数の年 (世紀)
`$EC` | ロケール依存の世紀の異なる表現 (日本だと元号 `"令和"`)
`%g` | ISOの週ベースのうしろ2桁0埋め10進数の年
`%G` | ISOの週ベースの4桁0埋め10進数の年
`%y` | うしろ2桁0埋め10進数の年
`%Ey` | ロケール依存の世紀からのオフセット年 (日本だと元号ベースで`"02年"`)
`%Y` | 4桁0埋め10進数の年
`%EY` | ロケール依存の完全な年 (日本だと元号含めて`"令和02年"`)

## 例

    #include <iostream>
    #include <chrono>
    #include <format>

    namespace chrono = std::chrono;

    int main()
    {
      // デフォルトフォーマットはoperator<<と同じ
      std::cout << std::format("{}", chrono::year{2020}) << std::endl;

      std::cout << std::format("{:%Y}", chrono::year{2020}) << std::endl; // 4桁の年
      std::cout << std::format("{:%y}", chrono::year{2020}) << std::endl; // うしろ2桁の年

      // ロケール依存の出力
      std::cout << std::format(std::locale("ja_JP.UTF-8"), "{:%EC}", chrono::year{2020}) << std::endl;
      std::cout << std::format(std::locale("ja_JP.UTF-8"), "{:%Ey}", chrono::year{2020}) << std::endl;
      std::cout << std::format(std::locale("ja_JP.UTF-8"), "{:%EY}", chrono::year{2020}) << std::endl;
    }

### 出力

    2020
    2020
    20
    令和
    02年
    令和02年

## バージョン

### 言語

- C++20

### 処理系

- Clang: 9.0 ❌
- GCC: 9.2 ❌
- Visual C++: 2019 Update 3 ❌

## 関連項目

- chronoの`std::format()` (フォーマットの詳細)