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;
これは正しいかどうか?
C++ 11ライブラリにアクセスできる場合は、 std::chrono
ライブラリを調べてください。これを使って、UNIXエポック以降のミリ秒を次のように取得できます。
#include <chrono>
// ...
using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
system_clock::now().time_since_Epoch()
);
<sys/time.h>
を使う
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;
これを参照 してください 。
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;
}
この答えは、 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;
}
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;
}