2012-02-08 30 views
9

我使用boost::posix_time::ptime来衡量我的模拟运行时间和其他东西。获得提升:: posix_time :: time_duration在几秒钟内

assuimg

boost::posix_time::ptime start, stop; 
boost::posix_time::time_duration diff; 
start = boost::posix_time::microsec_clock::local_time(); 
sleep(5); 
stop = boost::posix_time::microsec_clock::local_time(); 
diff = stop - stop; 

现在

std::cout << to_simple_string(diff) << std::endl; 

回报在hh:mm:ss.ssssss格式的时间,我想有时间,以及在ss.sssssss

这样做,我想

boost::posix_time::time_duration::sec_type x = diff.total_seconds(); 

但给我的答案SS的格式和seconds()回报返回秒标准化数(0..60)。

我的问题我怎样才能得到我的模拟时间在ss.ssssss格式的秒钟?

编辑

我是能够做到:

std::cout << diff.total_seconds() << "." << diff.fractional_seconds() << std::endl; 

是有什么高雅,可以绘制ss.sssssss?

回答

14

total_seconds()返回一个long值,它没有归一化到0..60s。

所以只是这样做:

namespace bpt = boost::posix_time; 

int main(int , char**) 
{ 
    bpt::ptime start, stop; 
    start = bpt::microsec_clock::local_time(); 
    sleep(62); 
    stop = bpt::microsec_clock::local_time(); 

    bpt::time_duration dur = stop - start; 

    long milliseconds = dur.total_milliseconds(); 

    std::cout << milliseconds << std::endl; // 62000 

    // format output with boost::format 
    boost::format output("%.2f"); 
    output % (milliseconds/1000.0); 
    std::cout << output << std::endl; // 62.00 
} 
+0

感谢您的重播。根据你的例子,我想要以下输出:62.0000(ss.ssssss)。可能吗? – Eagle 2012-02-08 14:56:09

+0

@Eagle:我用'boost :: format'添加了一个你想要的输出的例子。希望能帮助到你。 – nabulke 2012-02-08 18:41:54

1

我看到的最直接的方式是这样的输出,沿nabulke的帖子的线时间计算的其余部分:

#include <iomanip> 
double dseconds = dur.total_milliseconds()/1000. ; 

std::cout << std::setiosflags(std::ios::fixed) << std::setprecision(3); 
std::cout << dseconds << std::endl; 

你想用浮点数表达时间,所以最好实际使用一个浮点数并应用标准流格式化操纵器。

+0

它的工作,你是对的。我自己尝试过,但我忘了“。” ....所以我得到了整数 – Eagle 2012-02-08 15:47:34

1
// whatever time you have (here 1second) 
boost::posix_time::ptime pt = boost::posix_time::from_time_t(1); 
// subtract 0 == cast to duration 
boost::posix_time::time_duration dur = pt - boost::posix_time::from_time_t(0); 
// result in ms 
uint64_t ms = dur.total_milliseconds(); 
// result in usec 
uint64_t us = dur.total_microseconds(); 
// result in sec 
uint64_t s = dur.total_seconds(); 
std::cout << "s = " << s << ", ms = " << ms << ", us = " << us << std::endl; 

S = 1毫秒= 1000,美国= 1000000