私が使用しているWindowsの場合、エポックから数秒を取得するためのクロスプラットフォームソリューションはありますか
long long NativesGetTimeInSeconds()
{
return time (NULL);
}
しかし、Linuxに乗る方法は?
すでに使用しています: std::time(0)
(#include <ctime>
を忘れないでください)。ただし、std::time
が実際にエポックが標準で指定されていないために時間を返すかどうか( C11 、C++標準で参照):
7.27.2.4
time
関数あらすじ
#include <time.h> time_t time(time_t *timer);
説明
時間関数は、現在のカレンダー時間を決定します。 値のエンコーディングは指定されていません。[私の強調]
C++の場合、C++ 11以降は time_since_Epoch
を提供します。ただし、C++ 20以降でのみ std::chrono::system_clock
のエポックがUnix時間として指定されていたため、指定されていないため、以前の標準では移植できない可能性があります。
それでも、Linuxでは、std::chrono::system_clock
は通常C++ 11、C++ 14、C++ 17でもUnixTimeを使用するため、次のコードを使用できます。
#include <chrono>
// make the decltype slightly easier to the eye
using seconds_t = std::chrono::seconds;
// return the same type as seconds.count() below does.
// note: C++14 makes this a lot easier.
decltype(seconds_t().count()) get_seconds_since_Epoch()
{
// get the current time
const auto now = std::chrono::system_clock::now();
// transform the time into a duration since the Epoch
const auto Epoch = now.time_since_Epoch();
// cast the duration into seconds
const auto seconds = std::chrono::duration_cast<std::chrono::seconds>(Epoch);
// return the number of seconds
return seconds.count();
}
Cで。
time(NULL);
C++の場合。
std::time(0);
そして、時間の戻り値は次のとおりです。time_t notlong long
時間を取得するためのネイティブLinux関数はgettimeofday()
[他にもいくつかのフレーバーがあります]ですが、これは秒とナノ秒で時間を取得します。これは必要以上の時間なので、引き続き実行することをお勧めします。 time()
を使用します。 [もちろん、time()
はgettimeofday()
をどこかで呼び出すことで実装されますが、まったく同じことを行う2つの異なるコードを使用するメリットはわかりません。それが必要な場合は、WindowsでGetSystemTime()
などを使用することになります[これが正しい名前かどうかはわかりません。Windowsでプログラミングしてからしばらく経ちました]