私が望むのは、エポックからの時間をミリ秒単位で取得し、それを unsigned long に格納することだけです。
この関連する質問を見つけました。しかし正直なところ、これはこのような単純なタスクを実行する最も簡単な方法ではありませんよね? もっとシンプルなものを望んでいますが、std::chrono リファレンスには何も見つかりません。どんなアドバイスでも大歓迎です。必ずしも使用する必要はありませんがstd::chrono
、プラットフォームに依存しないようにしたいと考えています。
私が望むのは、エポックからの時間をミリ秒単位で取得し、それを unsigned long に格納することだけです。
この関連する質問を見つけました。しかし正直なところ、これはこのような単純なタスクを実行する最も簡単な方法ではありませんよね? もっとシンプルなものを望んでいますが、std::chrono リファレンスには何も見つかりません。どんなアドバイスでも大歓迎です。必ずしも使用する必要はありませんがstd::chrono
、プラットフォームに依存しないようにしたいと考えています。
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();