c++ chrono给出负纪元时间

标签 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

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

最佳答案

您正在溢出代码中的 long:

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

最好的办法是确保您的数据类型有足够的“位”来表示持续时间。我愿意

auto currTime = ms.count();

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

关于c++ chrono给出负纪元时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29436297/

相关文章:

python - Python 中的 datetime.fromtimestamp(os.path.getctime()) 会给我一个时区感知值吗?

c++ - 在应用程序中合并文本文件?

c++ - ZMQ 民意调查不起作用

r - 提高 R 中 data.table 中两列的粘贴速度(可重现)

javascript - 使用 MomentJS 将日期转换为自然语言

timestamp - 使用 Apache Derby 将日期转换为自纪元以来的毫秒数

python - 从感知日期时间到时间戳的转换再返回一个小时?

c++ - 为优先级队列的底层容器使用自定义类型列表

c++ - 如何使用 chrono 为带有累加器计时器的算法计时?

ruby-on-rails - Ruby:将时间和星期几应用于日期时间