170

在 Java 中,我们可以使用System.currentTimeMillis()从纪元时间开始以毫秒为单位获取当前时间戳,即 -

当前时间与 UTC 1970 年 1 月 1 日午夜之间的差异,以毫秒为单位。

在 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 回答
47

利用<sys/time.h>

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

参考这个

于 2013-10-24T01:18:05.683 回答
34

从 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;
}
于 2019-05-13T07:39:44.880 回答
31

这个答案与Oz.'s非常相似,<chrono>用于 C++——我没有从 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; 会给你一个像 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;
}
于 2014-12-09T06:42:18.723 回答
-29

包含<ctime>使用time功能。

于 2013-10-24T01:10:06.513 回答