Kir*_*ril 5 c++ time datetime boost date
我已经在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年8月9日17:27:00.000".这里有什么收获?
好的,所以我的错误源于我有2个程序,一个是C#(8字节/ 64位长)和一个C++(4字节/ 32位长); 无论如何,这里没有描述这种互动.
但是,当我使用时long long,该值为正,但结果日期(构造from_time_t)仍然不正确:"2012-Oct-02 10:09:36".
大概你是在一个long小于64位的平台上.
假设它是32位 - 在这种情况下,a的最大值long是2147483648.但是,自纪元以来它已经是大约1312000000000毫秒,所以long显然不足以保持这个值,因此你看到溢出.
我会做这样的事情:
ptime epoch = time_from_string("1970-01-01 00:00:00.000");
ptime other = time_from_string("2011-08-09 17:27:00.000");
time_duration const diff = other - epoch;
long long ms = diff.total_seconds();
ms *= 1000LL;
ms += diff.fractional_seconds() / 1000000L; // 1000L if you didn't build datetime
                                            // with nanosecond resolution
ptime从指定的毫秒数创建一个具有相同的问题 - ptime按照long你的方式工作,你有一个long long- 所以你基本上需要做相反的事情:
// given long long ms
time_duration t = seconds(static_cast<long>(ms / 1000LL));
if (ms % 1000LL)
    t += milliseconds(static_cast<long>(ms % 1000LL));