我试图在互联网上找到答案。我需要一个时间戳,以秒为单位,微秒分辨率。
boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
// not really getting any further here
double now_seconds = 0; // a value like 12345.123511, time since epoch in seconds with usec precision
更新
将当日的开头用作时代就足够了 - 即24小时的时间戳。
答案 0 :(得分:1)
N.B。此答案提供了一种允许任意纪元的通用方法,因为它是在更新之前编写的。当需要相对于当天开始的时间戳时,fonZ的答案是一个很好的简化。
我不知道库中现有的功能可以完全满足您的要求,但是在文档的帮助下,您可以通过几行来实现自己的功能。
从代表纪元的ptime
中减去ptime
,得到一个time_duration
,表示自纪元以来经过的时间。 time_duration
类提供total_microseconds()
。适当缩放结果以获得秒数。
#include <boost/date_time/local_time/local_time.hpp>
#include <boost/date_time/posix_time/ptime.hpp>
#include <boost/format.hpp>
#include <iostream>
double seconds_from_epoch(boost::posix_time::ptime const& t)
{
boost::posix_time::ptime const EPOCH(boost::gregorian::date(1970,1,1));
boost::posix_time::time_duration delta(t - EPOCH);
return (delta.total_microseconds() / 1000000.0);
}
int main()
{
boost::posix_time::ptime now(boost::posix_time::microsec_clock::local_time());
std::cout << boost::format("%0.6f\n") % seconds_from_epoch(now);
return 0;
}
控制台输出:
1497218065.918929
答案 1 :(得分:1)
我解决了我的问题,至少它似乎工作正常(没有麻烦检查实际值,所以如果你想纠正我,请做我的客人。)
boost::posix_time::ptime now = boost::posix_time::microsec_clock::local_time();
double sec = now.time_of_day().total_microseconds()/1000000.0;