使用微秒分辨率将boost :: posix_time :: microsec_clock增加到两秒

时间:2017-06-11 21:12:04

标签: c++ boost posix

我试图在互联网上找到答案。我需要一个时间戳,以秒为单位,微秒分辨率。

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小时的时间戳。

2 个答案:

答案 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;   
}

Sample on Coliru

控制台输出:

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;