名前空間
変種
操作

std::chrono::duration

提供: cppreference.com
< cpp‎ | chrono
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
日付と時間のユーティリティ
duration
(C++11)
(C++11)
時刻
(C++20)



(C++20)(C++20)(C++20)(C++20)
時計
(C++20)
                                             
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
カレンダー
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
タイムゾーン
(C++20)
(C++20)
(C++20)
(C++20)
C スタイルの日付と時間
 
 
ヘッダ <chrono> で定義
template<

    class Rep,
    class Period = std::ratio<1>

> class duration;
(C++11以上)

クラステンプレート std::chrono::duration は時の間隔を表します。

これは刻み数と刻み幅から構成されます。 刻み数は Rep 型の値で、刻み幅はある刻みから次の刻みまでの秒数を表すコンパイル時有理数の定数です。

duration に格納されるデータは Rep 型の刻み数だけです。 Rep が浮動小数点の場合は、 duration は小数点以下の刻み数を表現できます。 Period は duration の型の一部に含まれ、異なる duration 間で変換するときにのみ使用されます。

目次

[編集] メンバ型

メンバ型 定義
rep Rep、刻み数を表す算術型
period Period (C++17未満)typename Period::type (C++17以上)、刻み幅を表す std::ratio (すなわち刻み1つあたりの秒数)

[編集] メンバ関数

新しい時間を構築します
(パブリックメンバ関数) [edit]
内容を代入します
(パブリックメンバ関数) [edit]
刻み数を返します
(パブリックメンバ関数) [edit]
[静的]
長さゼロの時間を返します
(パブリック静的メンバ関数) [edit]
[静的]
時間の最小値を返します
(パブリック静的メンバ関数) [edit]
[静的]
時間の最大値を返します
(パブリック静的メンバ関数) [edit]
単項 + および単項 - を実装します
(パブリックメンバ関数) [edit]
刻み数をインクリメントまたはデクリメントします
(パブリックメンバ関数) [edit]
2つの時間の間の複合代入を実装します
(パブリックメンバ関数) [edit]

[編集] 非メンバ関数

引数として時間を取る算術演算を実装します
(関数テンプレート) [edit]
2つの時間を比較します
(関数テンプレート) [edit]
時間を異なる刻み幅を持つ別の時間に変換します
(関数テンプレート) [edit]
時間を別の時間に切り捨て変換します
(関数テンプレート) [edit]
時間を別の時間に切り上げ変換します
(関数テンプレート) [edit]
時間を別の時間の最も近い値に丸めて変換します
(関数テンプレート) [edit]
時間の絶対値を取得します
(関数テンプレート) [edit]
duration に対してストリーム出力を行います
(関数テンプレート) [edit]
指定された書式に従って duration をストリームからパースします
(関数テンプレート) [edit]

[編集] ヘルパー型

定義
std::chrono::nanoseconds duration</*signed integer type of at least 64 bits*/, std::nano>
std::chrono::microseconds duration</*signed integer type of at least 55 bits*/, std::micro>
std::chrono::milliseconds duration</*signed integer type of at least 45 bits*/, std::milli>
std::chrono::seconds duration</*signed integer type of at least 35 bits*/>
std::chrono::minutes duration</*signed integer type of at least 29 bits*/, std::ratio<60>>
std::chrono::hours duration</*signed integer type of at least 23 bits*/, std::ratio<3600>>
std::chrono::days (C++20以上) duration</*signed integer type of at least 25 bits*/, std::ratio<86400>>
std::chrono::weeks (C++20以上) duration</*signed integer type of at least 22 bits*/, std::ratio<604800>>
std::chrono::months (C++20以上) duration</*signed integer type of at least 20 bits*/, std::ratio<2629746>>
std::chrono::years (C++20以上) duration</*signed integer type of at least 17 bits*/, std::ratio<31556952>>

ノート: 定義済みの時間型 nanoseconds, microseconds, milliseconds, seconds, minutes, hours は、いずれも少なくとも±292年の範囲をカバーします。

定義済みの時間型 days, weeks, months, years は、いずれも少なくとも±40000年の範囲をカバーします。 years は 365.2425 days (グレゴリオ暦の1年の平均的な長さ) に等しく、 months は 30.436875 days (years のちょうど 1/12) に等しいと定義されます。

(C++20以上)

[編集] ヘルパークラス

std::common_type 特性の特殊化
(クラステンプレートの特殊化) [edit]
時間が異なる刻み幅を持つ時間に変換可能であることを表します
(クラステンプレート)
ゼロ、最小、最大の刻み数を持つ指定された型の値を構築します
(クラステンプレート)
提供された書式に従って duration を書式化する std::formatter の特殊化
(クラステンプレートの特殊化) [edit]

[編集] リテラル

名前空間 std::literals::chrono_literals で定義
時間を表す std::chrono::duration リテラル
(関数) [edit]
分を表す std::chrono::duration リテラル
(関数) [edit]
秒を表す std::chrono::duration リテラル
(関数) [edit]
ミリ秒を表す std::chrono::duration リテラル
(関数) [edit]
マイクロ秒を表す std::chrono::duration リテラル
(関数) [edit]
ナノ秒を表す std::chrono::duration リテラル
(関数) [edit]

ノート: リテラル接尾辞 d, ydays, years ではなく day, year をそれぞれ参照します。

(C++20以上)

[編集]

この例は、どのようにカスタム時間型を定義し、その型の間で変換を行うかを示します

#include <iostream>
#include <chrono>
 
constexpr auto year = 31556952ll; // グレゴリオ暦の1年の平均的な秒数
 
int main()
{
    using shakes = std::chrono::duration<int, std::ratio<1, 100000000>>;
    using jiffies = std::chrono::duration<int, std::centi>;
    using microfortnights = std::chrono::duration<float, std::ratio<14*24*60*60, 1000000>>;
    using nanocenturies = std::chrono::duration<float, std::ratio<100*year, 1000000000>>;
 
    std::chrono::seconds sec(1);
 
    std::cout << "1 second is:\n";
 
    // 精度喪失を伴わない整数型の単位変換 (キャスト不要)。
    std::cout << std::chrono::microseconds(sec).count() << " microseconds\n"
              << shakes(sec).count() << " shakes\n"
              << jiffies(sec).count() << " jiffies\n";
 
    // 精度喪失を伴う整数型の単位変換 (キャストが必要)。
    std::cout << std::chrono::duration_cast<std::chrono::minutes>(sec).count()
              << " minutes\n";
 
    // 浮動小数点型の単位変換 (キャスト不要)。
    std::cout << microfortnights(sec).count() << " microfortnights\n"
              << nanocenturies(sec).count() << " nanocenturies\n";
}

出力:

1 second is:
1000000 microseconds
100000000 shakes
100 jiffies
0 minutes
0.82672 microfortnights
0.316887 nanocenturies