我正在使用boost::posix_time
来实现时钟。
date d(2000,Jan,20);
ptime start(d);
time_iterator titr(start,microseconds(15)); //increment by 15 microseconds
现在,当我想获取微秒时,我执行++time_iterator
,因此它将按该持续时间增加时钟。经过这个增量后,我想检索过去一小时以来的微秒,而不是总的微秒。一种方法是将其转换为字符串,然后从字符串中提取数据。但是还有更好的方法吗?
答案 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";
请务必对代码进行概要分析。