39

std::chrono::duration特定の日付以降を取得するにはどうすればよいですか? std::chrono::time_pointaを UNIX タイムスタンプに変換するには、これが必要です。

XXX にコードを挿入

auto unix_epoch_start = XXX;
auto time = std::chrono::system_clock::now();
auto delta = time - unix_epoc_start;
auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(delta).count();

time_pointメソッドがあることは知っていますtime_since_epoch()が、これが UNIX エポック (1970 年 1 月 1 日の 00:00:00 UTC) と同じであるとは限りません。

4

5 に答える 5

8

簡単に言うと、Unix タイムスタンプ (1970 年 1 月 1 日 UTC からの秒数) を取得するために使用する関数は次のとおりです。

static uint64_t getUnixTimeStamp(const std::time_t* t = nullptr)
{
    //if specific time is not passed then get current time
    std::time_t st = t == nullptr ? std::time(nullptr) : *t;
    auto secs = static_cast<std::chrono::seconds>(st).count();
    return static_cast<uint64_t>(secs);
}

この関数の利点は、デフォルトのパラメーター値が現在の時刻を提供するだけであることです。ただし、特定の時間を UNIX タイムスタンプに変換したい場合は、そうすることができます。

于 2016-11-30T22:55:51.227 に答える
2

構造体にmktime()エンコードされた目的の日付を現地時間の値に変換するために使用できます。tm time_t

UTC 時刻が必要な場合は、 を使用してその値を UTC構造gmttime()に変換し、得られた出力から、への入力で指定されたときにどの構造が目的の UTC を生成するかを判断します。time_ttmtmtime_tmktime()

少し精巧ですが、うまくいくか、少なくともヒントが得られることを願っています。

于 2013-01-24T16:33:44.050 に答える