概要
duration
は、2つの時間の間隔を表現するための型である。
duration
のテンプレートパラメータであるratio
の値によって、時間のためのあらゆる単位(ナノ秒、ミリ秒、秒, etc...)を表現することができる。
標準では、以下の別名が提供される:
型の別名 | 説明 | 対応バージョン |
---|---|---|
nanoseconds |
ナノ秒 | C++11 |
microseconds |
マイクロ秒 | C++11 |
milliseconds |
ミリ秒 | C++11 |
seconds |
秒 | C++11 |
minutes |
分 | C++11 |
hours |
時 | C++11 |
days |
日 | C++20 |
weeks |
週 | C++20 |
years |
年 | C++20 |
months |
月 | C++20 |
メンバ関数
構築/コピー/破棄
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++11 |
~duration() = default; |
デストラクタ | C++11 |
operator=(const duration&) = default; |
代入演算子 | C++11 |
観測
名前 | 説明 | 対応バージョン |
---|---|---|
count |
値を取得する | C++11 |
算術演算
名前 | 説明 | 対応バージョン |
---|---|---|
operator+ |
正の符号 | C++11 |
operator- |
負の符号 (符号反転する) | C++11 |
operator++ |
値をインクリメントする | C++11 |
operator-- |
値をデクリメントする | C++11 |
operator+= |
+ の複合代入 |
C++11 |
operator-= |
- の複合代入 |
C++11 |
operator*= |
* の複合代入 |
C++11 |
operator/= |
/ の複合代入 |
C++11 |
operator%= |
% の複合代入 |
C++11 |
静的メンバ関数
特別な値
名前 | 説明 | 対応バージョン |
---|---|---|
zero |
初期値を取得 | C++11 |
min |
最小値を取得 | C++11 |
max |
最大値を取得 | C++11 |
メンバ型
名前 | 説明 | 対応バージョン |
---|---|---|
rep |
値の数値型 Rep |
C++11 |
period |
値の周期を表す型 Period |
C++11 |
非メンバ関数
丸め演算
名前 | 説明 | 対応バージョン |
---|---|---|
duration_cast |
ゼロ方向への丸め | C++11 |
floor |
負の無限大方向への丸め | C++17 |
ceil |
正の無限大方向への丸め | C++17 |
round |
偶数方向への丸め | C++17 |
その他数学関数
名前 | 説明 | 対応バージョン |
---|---|---|
abs |
絶対値を求める | C++17 |
算術演算
名前 | 説明 | 対応バージョン |
---|---|---|
operator+ |
加算 | C++11 |
operator- |
減算 | C++11 |
operator* |
乗算 | C++11 |
operator/ |
除算 | C++11 |
operator% |
剰余算 | C++11 |
比較演算
名前 | 説明 | 対応バージョン |
---|---|---|
operator== |
等値比較を行う | C++11 |
operator!= |
非等値比較を行う | C++11 |
operator<=> |
三方比較を行う | C++20 |
operator< |
左辺が右辺より小さいか比較を行う | C++11 |
operator<= |
左辺が右辺以下かの比較を行う | C++11 |
operator> |
左辺が右辺より大きいか比較を行う | C++11 |
operator>= |
左辺が右辺以上かの比較を行う | C++11 |
入出力
名前 | 説明 | 対応バージョン |
---|---|---|
operator<< |
ストリームへの出力 | C++20 |
from_stream |
フォーマットを指定してストリームから入力 | C++20 |
リテラル
名前 | 説明 | 対応バージョン |
---|---|---|
ns |
ナノ秒リテラル | C++14 |
us |
マイクロ秒リテラル | C++14 |
ms |
ミリ秒リテラル | C++14 |
s |
秒リテラル | C++14 |
min |
分リテラル | C++14 |
h |
時リテラル | C++14 |
共通型サポート
名前 | 説明 | 対応バージョン |
---|---|---|
common_type |
異なるduration 間の共通の型を求めるstd::common_type の特殊化 |
C++11 |
文字列フォーマットサポート
名前 | 説明 | 対応バージョン |
---|---|---|
formatter |
文字列フォーマットの許可。std::formatter クラスの特殊化 |
C++20 |
enable_nonlocking_formatter_optimization |
std::print() とstd::println() の効率的な実装を有効にする |
C++26 |
ハッシュサポート
名前 | 説明 | 対応バージョン |
---|---|---|
template <class T> struct hash; |
hash クラスの先行宣言 |
C++26 |
template<class Rep, class Period> struct hash<chrono::duration<Rep, Period>>; |
hash クラスのduration に対する特殊化。hash<Rep> が有効な場合のみ有効 |
C++26 |
例
#include <iostream>
#include <chrono>
#include <ctime>
using std::chrono::system_clock;
using std::chrono::seconds;
void print(const system_clock::time_point& p)
{
std::time_t t = system_clock::to_time_t(p);
char buf[26]; // 最低26バイトが必要
# ifdef _MSC_VER
// Visual Studioではctime_s()が推奨されている。
ctime_s(buf, 26, &t);
# else
// ctime()のリエントラント版
ctime_r(&t, buf);
# endif
// 出力された文字列には改行が含まれていることに注意
std::cout << buf;
}
int main()
{
// 現在日時を取得
system_clock::time_point now = system_clock::now();
// 3秒後の日時を取得
system_clock::time_point p = now + seconds(3);
print(now);
print(p);
}
34
system_clock::time_point now = system_clock::now();
#include <iostream>
#include <chrono>
#include <ctime>
using std::chrono::system_clock;
using std::chrono::seconds;
void print(const system_clock::time_point& p)
{
std::time_t t = system_clock::to_time_t(p);
char buf[26]; // 最低26バイトが必要
# ifdef _MSC_VER
// Visual Studioではctime_s()が推奨されている。
ctime_s(buf, 26, &t);
# else
// ctime()のリエントラント版
ctime_r(&t, buf);
# endif
出力例
Tue Oct 16 16:25:08 2012
Tue Oct 16 16:25:11 2012
バージョン
言語
- C++11
処理系
- GCC: 4.7.0 ✅
- Visual C++: 2012 ✅, 2013 ✅, 2015 ✅
参照
- P2592R3 Hashing support for
std::chrono
value classes- C++26でハッシュサポートが追加された