C++ c++;给出负历元时间的时钟

C++ c++;给出负历元时间的时钟,c++,time,epoch,C++,Time,Epoch,我用这段代码来获取从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(); 我的计算机时钟时间是正确的日期,为什

我用这段代码来获取从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();

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

您的代码中溢出了
long

long currTime = (long)ms.count();
最好的办法是确保您的数据类型有足够的“位”来表示持续时间。我愿意

auto currTime = ms.count();

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

您的代码中溢出了
long

long currTime = (long)ms.count();
最好的办法是确保您的数据类型有足够的“位”来表示持续时间。我愿意

auto currTime = ms.count();

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

适合我<代码>标准::难道您没有显示代码中转换代码并丢失数据的部分吗。1428079769000是一个很大的数字。事实上,超过2平方米。我正在调试,看看结果如何。突然,我的程序开始出错。就像我说的,在过去的几周里,甚至在几个小时前,它对我来说都很好。现在,它将无法在调试或发布中工作。我把这个版本放在另一台机器上(我注意到这台机器出了问题),它也在做同样的事情there@chris毫秒至少有45位,所以可能编译器使用的是64位类型。@vsoftco,是的,当它从库中出来时,肯定没问题。适合我<代码>标准::难道您没有显示代码中转换代码并丢失数据的部分吗。1428079769000是一个很大的数字。事实上,超过2平方米。我正在调试,看看结果如何。突然,我的程序开始出错。就像我说的,在过去的几周里,甚至在几个小时前,它对我来说都很好。现在,它将无法在调试或发布中工作。我把这个版本放在另一台机器上(我注意到这台机器出了问题),它也在做同样的事情there@chris毫秒至少有45位,因此可能编译器使用的是64位类型。@vsoftco,是的,当它从库中出来时,肯定没问题。