最終更新日時(UTC): 2025年07月11日 17時16分44秒
Koichi Murase が更新

履歴 編集

class
<chrono>

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

    namespace std::chrono {
      template <class Duration>
      class hh_mm_ss;
    }

## 概要

`hh_mm_ss`は、任意の時間間隔型の値を、時:分:秒それと可能であれば秒未満の時間に分割するクラスである。秒未満の時間間隔はある非負の10の乗数ベースの単位の値である。

`Duration`テンプレートパラメータとしては、時間を分割する精度を指定する。

このクラスは、入力の時間間隔が負である場合でも動作するよう、負の時間間隔をモデル化する。ただし、負である場合でも、各フィールドは非負の時間間隔を返す。

## テンプレートパラメータ制約

- `Duration`が`duration`クラステンプレートのインスタンスでない場合、プログラムは不適格となる

## メンバ関数

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

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

### 観測

名前 | 説明 | 対応バージョン
--- | --- | ---
`is_negative` | 負の時間かを判定する | C++20
`hours` | 時フィールドを取得する | C++20
`minutes` | 分フィールドを取得する | C++20
`seconds` | 秒フィールドを取得する | C++20
`subseconds` | 秒未満を取得する | C++20
`to_duration` | 時:分:秒、秒未満をもつ`duration`オブジェクトに変換する | C++20
`operator precision` | 時:分:秒、秒未満をもつ`duration`オブジェクトに明示的に変換する | C++20

## メンバ定数

名前 | 説明 | 対応バージョン
--- | --- | ---
`static constexpr bool fractional_width` | `precision`によって表現される小数の小数桁数 | C++20

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`precision` | 小数も含めて表現できる`duration`型。`duration<common_type_t<Duration::rep, seconds::rep>, ratio<1, 10``fractional_width``>>` | C++20

## 非メンバ関数

### 入出力

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator<<` | 出力ストリームに出力する | C++20

## 文字列フォーマット

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

## 例

    #include <iostream>
    #include <chrono>

    namespace chrono = std::chrono;
    using namespace std::chrono_literals;

    int main()
    {
      // コンストラクタ引数からテンプレートパラメータDurationを推論
      chrono::hh_mm_ss time2{15h + 30min + 20s}; // 秒単位
      std::cout << time2 << std::endl;

      // 時間間隔の型を明示的に指定
      chrono::hh_mm_ss<chrono::seconds> time3{65745s}; // 秒単位
      std::cout << time3 << std::endl;

      chrono::hh_mm_ss time4{65745123ms}; // ミリ秒単位
      std::cout << time4 << std::endl;
    }

### 出力

    15:30:20
    18:15:45
    18:15:45.123

## バージョン

### 言語

- C++20

### 処理系

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