【问题标题】:Boost Timer 24 hour formatBoost Timer 24 小时格式
【发布时间】:2013-04-22 15:48:40
【问题描述】:

我正在使用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获得。

【问题讨论】:

    标签: c++ boost timer formatting duration


    【解决方案1】:

    您需要将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
    

    【讨论】:

    • 感谢您的努力,但也许其他人有更清洁的解决方案。仅仅为了格式化时间而进行如此多的转换似乎有点矫枉过正(即使这允许灵活的格式化)。我发现boost::chrono 中没有持续时间格式真的很奇怪...
    • 现在版本 boost::chrono 是时间实用程序(不是日期时间库)。所以,chrono/date 现在正在开发中。 svn.boost.org/svn/boost/sandbox/chrono_date/libs/date/doc/…相信以后的版本会更好用。
    猜你喜欢
    • 2012-10-09
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2013-04-05
    相关资源
    最近更新 更多