170

Java では、System.currentTimeMillis()エポック時間から現在のタイムスタンプをミリ秒単位で取得するために使用できます。

現在時刻と 1970 年 1 月 1 日 UTC 午前 0 時との差 (ミリ秒単位)。

C ++で同じことを取得する方法は?

現在、これを使用して現在のタイムスタンプを取得しています-

struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds

cout << ms << endl;

これは正しく見えますか?

4

6 に答える 6

306

C++ 11 ライブラリにアクセスできる場合は、ライブラリを確認してくださいstd::chrono。次のように、Unix エポック以降のミリ秒を取得するために使用できます。

#include <chrono>

// ...

using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
    system_clock::now().time_since_epoch()
);
于 2013-10-24T01:28:43.333 に答える
31

この回答は、C++を使用するOz. のとかなり似て<chrono>います - 私は Oz から取得しませんでした。けれど...

このページの下部にある元のスニペットをピックアップし、完全なコンソール アプリになるようにわずかに変更しました。私はこの小さなものを使うのが大好きです。多くのスクリプトを作成し、Windows で信頼性の高いツールが必要な場合は、VB やあまり近代的でなく、読みにくいコードを使用することなく、実際のミリ秒単位でエポックを取得できます。

#include <chrono>
#include <iostream>

int main() {
    unsigned __int64 now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
    std::cout << now << std::endl;
    return 0;
}
于 2017-01-11T04:53:04.213 に答える
13

gettimeofday を使用する場合は long long にキャストする必要があります。そうしないとオーバーフローが発生し、エポックからの実際のミリ秒数が得られなくなります。 long int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000; エポックから8日後の767990892のような数値が得られます;-)。

int main(int argc, char* argv[])
{
    struct timeval tp;
    gettimeofday(&tp, NULL);
    long long mslong = (long long) tp.tv_sec * 1000L + tp.tv_usec / 1000; //get current timestamp in milliseconds
    std::cout << mslong << std::endl;
}
于 2014-12-09T06:42:18.723 に答える