c ++ chrono给出负的纪元时间

时间:2015-04-03 16:47:02

标签: c++ time epoch

我正在使用此代码来获取自纪元以来毫秒级的当前时间

std::chrono::milliseconds ms = std::chrono::duration_cast< std::chrono::milliseconds >(
    std::chrono::high_resolution_clock::now().time_since_epoch()
    );
long currTime = (long)ms.count();

问题是我现在得到一个负数,每次拨打这个给我一个接近0的负数。它已经工作好几个星期了,几个小时前工作。我认为我没有做任何应该影响它的事情,但它可能会发生。

下面是几个我得到的例子:

First time: -2145295742
Second time: -2145279907
Third time: -2145268209
Last time: -2144900213

我的电脑时钟时间是正确的日期,为什么我可能会在这里得到负数?

1 个答案:

答案 0 :(得分:3)

您的代码中出现了long

long currTime = (long)ms.count();

最好的办法是确保您的数据类型有足够的&#34;位&#34;代表持续时间。我做了

auto currTime = ms.count();

或者,请确保使用至少45位的类型(因为milliseconds中的整数类型保证为minimum size)。我发现在这种情况下auto非常有用,因为你的代码是可移植的,而currTime总是使用正确的类型,无论编译器/平台如何。