从boost :: time_duration检索微秒

时间:2018-11-08 21:27:39

标签: c++ boost

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

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

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

1 个答案:

答案 0 :(得分: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";

请务必对代码进行概要分析。