C++ chrono 给出负纪元时间

ied*_*doc 2 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();
Run Code Online (Sandbox Code Playgroud)

问题是我现在得到一个负数,每次调用都会给我一个接近 0 的负数。它已经工作了好几个星期,几个小时前就开始工作了。我不认为我做了任何应该影响它的事情,但这是可能的。

这是我得到的几个示例数字:

First time: -2145295742
Second time: -2145279907
Third time: -2145268209
Last time: -2144900213
Run Code Online (Sandbox Code Playgroud)

我的计算机时钟时间是正确的日期,那么为什么我会在这里得到负数呢?

vso*_*tco 6

您的代码溢出了long

long currTime = (long)ms.count();
Run Code Online (Sandbox Code Playgroud)

最好的办法是确保您的数据类型足够大(有足够的位)来表示持续时间。我会做

auto currTime = ms.count();
Run Code Online (Sandbox Code Playgroud)

或者,确保使用至少 45 位的类型(因为这保证是中整数类型的最小大小milliseconds)。我发现auto在这种情况下非常有用,因为您的代码将是可移植的,并且无论编译器/平台如何,始终使用正确的类型currTime