是否有一些“标准”方式或我能做的最好的方法是直接通过从gregorian::date(1970,1,1)
减去来计算?
答案 0 :(得分:33)
由于@ icecrime的方法转换两次(ptime内部使用线性表示),我决定使用直接计算。这是:
time_t to_time_t(boost::posix_time::ptime t)
{
using namespace boost::posix_time;
ptime epoch(boost::gregorian::date(1970,1,1));
time_duration::sec_type x = (t - epoch).total_seconds();
// ... check overflow here ...
return time_t(x);
}
编辑:感谢@jaaw将此引起我的注意。由于提升1.58,此功能包含在date_time/posix_time/conversion.hpp
,std::time_t to_time_t(ptime pt)
。
答案 1 :(得分:15)
这是@ ybungalobill方法的变体,它将让你过去2038年,以防万一。 :)
int64_t rax::ToPosix64(const boost::posix_time::ptime& pt)
{
using namespace boost::posix_time;
static ptime epoch(boost::gregorian::date(1970, 1, 1));
time_duration diff(pt - epoch);
return (diff.ticks() / diff.ticks_per_second());
}
答案 2 :(得分:14)
time_t
是用于以秒为单位保持时间的类型(通常为纪元时间)。我猜你是在大纪元以后的时间,如果是这样的话,除了你已经减法之外,我还没有意识到直接获得大纪元时间的任何方式。获得time_duration
(减法结果)后,您可以在有效期内调用total_seconds()
并将其存储在time_t
。
顺便说一句。如果你在大纪元之后,你可以简单地使用gettimeofday()
并为自己节省一些头痛!
答案 3 :(得分:5)
答案 4 :(得分:2)
这两行应该这样做。
tm td_tm = to_tm(pt);
time_t tt = mktime(&td_tm);