是否有一些“标准”方法或者我能做的最好的方法是直接通过减去来计算它gregorian::date(1970,1,1)
?
问问题
34968 次
5 回答
37
由于@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 引起我的注意。自 boost 1.58 起,此功能包含在date_time/posix_time/conversion.hpp
,中std::time_t to_time_t(ptime pt)
。
于 2010-12-16T15:18:46.233 回答
16
time_t
是用于以秒为单位保存时间的类型(通常是纪元时间)。我猜你是在纪元时间之后,如果是这样,除了你已经减法之外,我不知道有什么方法可以直接直接获得纪元时间。一旦有了time_duration
(减法的结果),就可以调用total_seconds()
持续时间并将其存储在time_t
.
顺便提一句。如果您在时代之后,您可以简单地使用gettimeofday()
并省去一些头痛!
于 2010-12-16T14:26:56.167 回答
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());
}
于 2011-07-27T19:05:59.017 回答
2
这两条线应该做到这一点。
tm td_tm = to_tm(pt);
time_t tt = mktime(&td_tm);
于 2012-04-26T21:47:40.807 回答