- ctime[meta header]
- std[meta namespace]
- class[meta id-type]
- cpp17[meta cpp]
namespace std {
class timespec {
time_t tv_sec;
long tv_nsec;
};
}
timespec
は、timespec_get()
関数によって返される、エポックからの経過時間を表す型である。各メンバ変数は、以下を意味する:
変数 | 説明 |
---|---|
tv_sec |
エポックからの経過秒。 値は0以上 |
tv_nsec |
ナノ秒単位で表される秒未満の値 値の範囲は [0, 999'999'999] |
#include <iostream>
#include <ctime>
#include <chrono>
namespace chrono = std::chrono;
int main()
{
// UTCベースの現在時間を取得する
std::timespec ts;
if (std::timespec_get(&ts, TIME_UTC) == 0) {
std::cerr << "現在時間の取得に失敗した" << std::endl;
return 1;
}
std::cout << "tv_sec:" << ts.tv_sec
<< " tv_nsec:" << ts.tv_nsec
<< std::endl;
// 秒未満の値をミリ秒で取得
auto ms = chrono::duration_cast<chrono::milliseconds>(chrono::nanoseconds{ts.tv_nsec});
std::cout << "ms:" << ms.count() << std::endl;
// 秒以上の値だけを日時フォーマットで出力
std::cout << std::ctime(&ts.tv_sec) << std::endl;
}
- std::timespec[color ff0000]
- std::timespec_get[link timespec_get.md]
- TIME_UTC[link time_utc.md]
- chrono::duration_cast[link /reference/chrono/duration_cast.md]
- chrono::milliseconds[link /reference/chrono/milliseconds.md]
- chrono::nanoseconds[link /reference/chrono/nanoseconds.md]
- ms.count()[link /reference/chrono/duration/count.md]
tv_sec:1558682399 tv_nsec:453303489
ms:453
Fri May 24 16:19:59 2019
- C++17
- Clang: 7.0
- GCC: 9.1
- Visual C++: ??
- Clangは、グローバル名前空間 (POSIXの実装) では、3.1で動作確認できた
- GCCは、グローバル名前空間 (POSIXの実装) では、4.4で動作確認できた