【发布时间】:2011-10-24 13:46:36
【问题描述】:
我看到一些other answers on SO 建议我们可以通过从“其他”时间中减去纪元时间来获得以毫秒为单位的纪元时间,但是当我尝试它时它不起作用:
ptime epoch = time_from_string("1970-01-01 00:00:00.000");
ptime other = time_from_string("2011-08-09 17:27:00.000");
long diff = (other-epoch).total_milliseconds();
在这个阶段差异是 -1349172576,它应该是一个正数,因为“其他”时间是 2011 年。有人知道可能导致这种情况的原因吗?获取自纪元以来的毫秒数的正确方法是什么?
另外,我尝试从毫秒构造一个 ptime 对象:
ptime result = from_time_t(diff);
然后结果变为:“1927-Apr-01 13:50:24”,它应该是“2011-Aug-09 17:27:00.000”。这里有什么问题?
更新:
好的,所以我的错误源于我有 2 个程序,一个是 C#(8 字节/64 位长)和一个 C++(4 字节/32 位长);无论如何,这里没有描述这种交互。
但是,当我使用 long long 时,该值为正,但生成的日期(构造 from_time_t)仍然不正确:“2012-Oct-02 10:09:36”。
【问题讨论】:
-
你的平台上
long的大小是多少? -
您的机器有多长?以毫秒为单位的 40 年大约是 2^40 毫秒。尝试谷歌搜索
log(40+years/1+millisecond)/log(2)。 -
啊... Windows,long 是 4 个字节,我应该使用 long long。我的程序有 2 个组件,一个 C# 和一个 C++; C# 中的 long 是 8 个字节,但在 C++ 中只有 4 个字节,所以有点搞砸了。
-
@Lirik :
from_time_t采用time_t,这通常是long的类型定义。所以你回到了第一方。你真正想要是什么类型的? -
我想获取
long long并将其转换为ptime。
标签: c++ datetime date boost time