web-dev-qa-db-ja.com

1970年から現在のタイムスタンプをミリ秒単位で取得する方法

Javaでは、System.currentTimeMillis()を使用して現在のタイムスタンプをミリ秒単位で取得できます。

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

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;

これは正しいかどうか?

107
AKIWEB

C++ 11ライブラリにアクセスできる場合は、 std::chrono ライブラリを調べてください。これを使って、UNIXエポック以降のミリ秒を次のように取得できます。

#include <chrono>

// ...

using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
    system_clock::now().time_since_Epoch()
);
189
Oz.

<sys/time.h>を使う

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

これを参照 してください

35
Trying

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

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;
}
12
rli

この答えは、 Oz. と非常によく似ていますが、C++に<chrono>を使用しています - 私はOzから入手しませんでした。しかし….

このページの 下部にある元のスニペット を選び、それをわずかな修正を加えて完全なコンソールアプリにしました。私はこのlil 'ol'のものを使うのが大好きです。あなたがたくさんのスクリプトを書いて、VBを使うことに頼ることなく実際のミリ秒でエポックを得るためにWindowsで信頼できるツールを必要とするならば、それは素晴らしいです。

#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;
}
12

C++ 11以降、std::chronoを使用できます。

  • 現在のシステム時刻を取得します。std::chrono::system_clock::now()
  • エポック以降の時間を取得:.time_since_Epoch()
  • 基礎となる単位をミリ秒に変換します。duration_cast<milliseconds>(d)
  • std::chrono::millisecondsを整数に変換します(オーバーフローを避けるためにuint64_t
#include <chrono>
#include <cstdint>
#include <iostream>

uint64_t timeSinceEpochMillisec() {
  using namespace std::chrono;
  return duration_cast<milliseconds>(system_clock::now().time_since_Epoch()).count();
}

int main() {
  std::cout << timeSinceEpochMillisec() << std::endl;
  return 0;
}
1