2012-02-08 53 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