升压定时器24小时格式

时间:2013-04-22 15:48:40

标签: c++ boost timer formatting duration

我正在使用boost::timer::cpu_timer计算算法的“用户处理时间”,如下所示:

boost::timer::cpu_timer timer;

boost::timer::nanosecond_type userTime = timer.elapsed().user;

我的问题是如何以userTime格式格式化HH::MM::SS.mmm?我知道我可以自己编写代码,但我希望Boost提供一些方法来实现这一点。

我遇到了this example,但它使用的是boost::chrono::duration<Rep, Period>,我不知道如何从boost::timer::nanosecond_type获取。

1 个答案:

答案 0 :(得分:2)

您需要将nanosecond_type转换为durationtime_point

#include <iostream>
#include <boost/timer/timer.hpp>
#include <boost/chrono.hpp>
#include <boost/format.hpp>

namespace chrono = boost::chrono;

int main()
{
    // get now time & start timer
    chrono::system_clock::time_point start_time = chrono::system_clock::now();
    boost::timer::cpu_timer timer;

    for (int i = 0; i < 100000; ++i) {}

    // elapsed time conversion to time_point
    chrono::system_clock::time_point end_time
        = chrono::time_point_cast<chrono::system_clock::duration>(
                start_time + chrono::nanoseconds(timer.elapsed().user));

    // time_point conversion to time_t&tm
    std::time_t time = chrono::system_clock::to_time_t(end_time);
    std::tm* t = std::localtime(&time);

    // formatting
    std::size_t fractional_seconds = chrono::duration_cast<chrono::milliseconds>(
                                        end_time.time_since_epoch()
                                     ).count() % 1000;
    std::string s = (boost::format("%d:%d:%d.%d")
                        % t->tm_hour
                        % t->tm_min
                        % t->tm_sec
                        % fractional_seconds
                    ).str();
    std::cout << s << std::endl;
}

可能的输出:

10:42:55.445