web-dev-qa-db-ja.com

できればC ++ 11クロノを使用して、エポックからの時間をミリ秒単位で取得します

私が望むのは、エポックからの時間をミリ秒単位で取得し、それを符号なしlongに保存することです。

この関連する質問 が見つかりました。しかし、正直なところ、これはこのような単純なタスクを実行する最も簡単な方法ではありませんか?もっとシンプルなものを期待していますが、 std :: chrono reference には何も見つかりません。どんなアドバイスでも大歓迎です。必ずしもstd::chronoを使用する必要はありませんが、プラットフォームに依存しないようにします。

43
Haatschii
_unsigned long milliseconds_since_Epoch =
    std::chrono::system_clock::now().time_since_Epoch() / 
    std::chrono::milliseconds(1);
_

ただし、特にプラットフォームの独立性が必要なため、_unsigned long_を十分に大きい可能性が高い型に置き換えることをお勧めします。

  • _(unsigned) long long_
  • std::(u)int64_t
  • _std::chrono::milliseconds::rep_
  • auto

私には、これはあなたが(整数除算との類推による)精度の損失の危険性があることと型システムの安全性を残していること(単位なしの数値を与えるための入力された時間)。ただし、コメントで示されているように、一部の人々は、タイプセーフから離れようとする試みには、コードを危険に見せるための意図的な試みを伴うべきだと言うでしょう。あなたがその信念を持っている人々に対処する必要がある場合は、無関係なスタイルの選択に関する議論に入るよりも_duration_cast_を使用する方が簡単かもしれません:

_unsigned long milliseconds_since_Epoch = 
    std::chrono::duration_cast<std::chrono::milliseconds>
        (std::chrono::system_clock::now().time_since_Epoch()).count();
_
76
Mike Seymour