如何以1970年以来的Java方式获取当前时间戳(以毫秒为单位)

时间:2013-10-24 01:08:08

标签: c++ timestamp

在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;

这看起来是否合适?

6 个答案:

答案 0 :(得分:188)

如果您可以访问C ++ 11库,请查看std::chrono库。您可以使用它来获取自Unix Epoch以来的毫秒数:

#include <chrono>

// ...

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

答案 1 :(得分:35)

使用<sys/time.h>

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

参考this

答案 2 :(得分:12)

如果使用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;
}

答案 3 :(得分:12)

这个答案非常类似于Oz.'s,使用<chrono>进行C ++ - 我没有从Oz中获取它。虽然...

我在bottom of this page选择了原始代码段,稍加修改后就成了一个完整的控制台应用。我喜欢使用这个“小”的东西。如果你做了大量的脚本并且在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;
}

答案 4 :(得分:1)

自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;
}

答案 5 :(得分:-21)

包含<ctime>并使用time功能。