如何从1970年以来获得当前的时间戳,就像Java得到的一样

在Java中,我们可以使用System.currentTimeMillis()获取自纪元时间以来的毫秒数的当前时间戳,

1970年1月1日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 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中获取它。 虽然…

我拿起这个页面底部的原始代码片段,并稍微修改它成为一个完整的控制台应用程序。 我喜欢用这个“小”的东西。 如果你做了很多脚本,并且需要Windows中的一个可靠的工具来实现毫秒级的纪元,而不使用VB或者一些不太现代的,不太适合读者的代码,那真是太棒了。

 #include <chrono> #include <iostream> int main() { __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; } 

包括<ctime>并使用time函数。