web-dev-qa-db-ja.com

Linuxでエポックから秒を取得

私が使用しているWindowsの場合、エポックから数秒を取得するためのクロスプラットフォームソリューションはありますか

long long NativesGetTimeInSeconds()
{
    return time (NULL);
}

しかし、Linuxに乗る方法は?

11
Boris

すでに使用しています: 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();
}
21
Zeta

Cで。

time(NULL);

C++の場合。

std::time(0);

そして、時間の戻り値は次のとおりです。time_t notlong long

14
Quentin Perez

時間を取得するためのネイティブLinux関数はgettimeofday() [他にもいくつかのフレーバーがあります]ですが、これは秒とナノ秒で時間を取得します。これは必要以上の時間なので、引き続き実行することをお勧めします。 time()を使用します。 [もちろん、time()gettimeofday()をどこかで呼び出すことで実装されますが、まったく同じことを行う2つの異なるコードを使用するメリットはわかりません。それが必要な場合は、WindowsでGetSystemTime()などを使用することになります[これが正しい名前かどうかはわかりません。Windowsでプログラミングしてからしばらく経ちました]

2
Mats Petersson