【问题标题】:retriving microseconds from boost::time_duration从 boost::time_duration 检索微秒
【发布时间】:2018-11-08 21:27:38
【问题描述】:

我正在使用boost::posix_time 来实现时钟。

date d(2000,Jan,20);
ptime start(d);
time_iterator titr(start,microseconds(15)); //increment by 15 microseconds

现在,当我想检索微秒时,我会使用++time_iterator,因此它会按该持续时间增加时钟。在这个增量之后,我想检索过去一小时以来的微秒而不是总微秒。一种方法是将其转换为字符串,从字符串中提取数据。但是有没有更好的方法呢?

【问题讨论】:

  • “自过去一小时以来的微秒数”本身并不是一回事。但是,如果您以微秒为单位获取当前的 unix 时间戳并将模运算符应用于它Tusec % 3600000000LL,您将获得所需的数量(没有闰秒调整和类似的东西)。

标签: c++ boost


【解决方案1】:

您可以构建一个时间来标记时间的开始 (soh),并计算从那里的差异:

for (time_iterator titr(start, /*micro*/seconds(15)); *titr < end; ++titr) {
    ptime soh(titr->date(), time_duration(titr->time_of_day().hours(), 0, 0));

    std::cout << *titr << "\t" << soh << " elapsed: " << (*titr-soh).total_microseconds() <<  "\n";
}

它可以更高效,意识到日期并不重要(小时与日期一致):

for (time_iterator titr(start, /*micro*/seconds(15)); *titr < end; ++titr) {
    std::cout << *titr << "\t elapsed: " << (titr->time_of_day()-hours(titr->time_of_day().hours())).total_microseconds() <<  "\n";
}

也许使用总微秒并进行取模技巧甚至会更有效:

std::cout << *titr << "\t elapsed: " << (titr->time_of_day().total_microseconds() % hours(1).total_microseconds()) << "\n";

如果重要,请始终分析您的代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 2016-10-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 1970-01-01
    相关资源
    最近更新 更多