std::chrono::time_point<std::chrono::system_clock, std::chrono::nanoseconds>
をお勧めします。あなたは型エイリアスでこれをもっときれいにすることができます。例:これはあなたの現在受け入れ答え(int64_t
)と同じ範囲を取得しますが、
template <class Duration>
using sys_time = std::chrono::time_point<std::chrono::system_clock, Duration>;
using sys_nanoseconds = sys_time<std::chrono::nanoseconds>;
sys_nanoseconds now = std::chrono::system_clock::now();
型の安全性を追加します。 int64_t
は、時刻または時間を意味する場合があります。sys_nanoseconds
は、time_point
を意味することができ、期間のように使用するとコンパイル時エラーになります。
たとえば、sys_nanoseconds
を2つ追加するとコンパイル時にエラーが発生します。しかし、2つを引いてsys_nanoseconds
とし、結果のタイプはstd::chrono::nanoseconds
です。
(オーバーフロー/アンダーフローの前に)あなたの範囲は次のようになります。
1677-09-21 00:12:43.145224192 to 2262-04-11 23:47:16.854775807
ナノ秒の精度で広い範囲を取得するには疑わしい価値があるが、128ビットの種類をサポートするプラットフォーム上でこのように行うことができます。
using nano128 = std::chrono::duration<__int128_t, std::nano>;
using sys_nano = sys_time<nano128>;
あなたの範囲は、+/- ユニバースの年齢よりはるかに大きいです。
一部のプラットフォームでは、std::chrono::system_clock::now()
は、ナノ秒の精度で報告されないことに注意してください。したがって、ナノ秒のタイムスタンプを保存することは過度の可能性があります。しかし、上記のコードをとり、あなたが望むどのような単位にでも変更するのは簡単です。
macOSではsystem_clock::now()
はmicroseconds
と報告しています。これはnanoseconds
の1000倍です。 Windowsでは1/10 microseconds
の単位でsystem_clock::now()
レポート:
using win_sys_duration = std::chrono::duration<std::int64_t,
std::ratio<1, 10'000'000>>;
using win_sys_time_point = sys_time<win_sys_duration>;
とgccの
、
system_clock::now()
レポート
nanoseconds
。
ナノ秒の精度を持つ符号なし64ビット整数の内側には、わずか584年しか収まりません。そう、ええ、私はOPがうまくいくと思います。 – rwols
私はこのソフトウェアが245年のうちにY2K262問題で死ぬのを楽しみにしています(実際には文字列を短くしなくてもKを使用します)。 :-) – ShadowRanger
私の推測では、私のソフトウェアは宇宙の終わりまで続くことはないだろう。買います!ありがとう! –