3

ミリ秒に変換std::chrono::monotonic_clock::now()してlongにキャストする方法は?

chronoからsteady_clockまたはhigh_resolution_clockを使用することも同じです。私は調べましstd::chrono::duration_cast<std::chrono::milliseconds>たが、現在のタイムスタンプのみが必要であり、期間のギャップは必要ありません。

4

2 に答える 2

8

現在のタイムスタンプは、ある時点を基準にして定義されます (したがって、期間です)。たとえば、エポックの始まり (Unix では 1970 年 1 月 1 日) に関するタイムスタンプを取得するのは「一般的」です。次を使用してそれを行うことができますtime_since_epoch()

namespace chr = std::chrono;

chr::time_point<chr::steady_clock> tp = chr::steady_clock::now();
std::cout << "hours since epoch: "
          << chr::duration_cast<chr::hours>(tp.time_since_epoch()).count()
          << '\n';

std::chrono::millisecondsミリ秒単位で値を取得するには、代わりににキャストする必要があります。

于 2012-06-19T17:44:27.467 に答える
3

すべての組み込みクロックには、基本時間である「エポック」が関連付けられています。エポックの実際の日付/時刻は指定されておらず、時計ごとに異なる場合があります。

比較のために数値だけが必要な場合は、some-clock::now().time_since_epoch()はそのクロックのエポックからの時間を提供します。これは、型のメンバーをduration使用して整数に変換できます。この単位は、クロックの によって異なります。特定の単位が必要な場合は、最初に次を使用します。count()durationperiodduration_cast

typedef std::chrono::steady_clock clk;
unsigned long long milliseconds_since_epoch=
    std::chrono::duration_cast<std::chrono::milliseconds>(
        clk::now().time_since_epoch()).count();

前述したように、エポックが指定されていないため、これは絶対タイム スタンプとしてではなく、比較にのみ適しています。

UNIX タイムスタンプが必要な場合は、を に変換する機能をstd::chrono::system_clock持つを使用する必要があります。to_time_t()time_pointtime_t

gettimeofdayまたは、プログラムの特定の時点でのベースライン カウントを、または何かからの対応する時間と共に取得し、それを使用して相対カウントを絶対時間に変換することもできます。

于 2012-06-20T07:36:15.977 に答える