2014-07-10 143 views
4

我已经编写了一个C++函数来获取HH:MM:SS格式的当前时间。我如何添加毫秒或纳秒,所以我可以使用像HH:MM:SS:MMM这样的格式?如果不可能,以毫秒为单位返回当前时间的函数也是很好的。然后我可以自己计算两个记录点之间的相对时间距离。获取以毫秒为单位的当前时间,或者HH:MM:SS:MMM格式

string get_time() 
{ 
    time_t t = time(0); // get time now 
    struct tm * now = localtime(&t); 
    std::stringstream sstm; 
    sstm << (now->tm_hour) << ':' << (now->tm_min) << ':' << now->tm_sec; 
    string s = sstm.str(); 
    return s; 
} 
+1

'的std :: put_time'具有用于HH'%T':MM:SS。 – chris

+0

_'...加毫秒或纳秒...'_咦!这是一个很大的尺寸范围!选择一个:P ... –

+0

那么,因为我有一个ping客户端,并且在bash shell上我们只能访问ns! :) –

回答

1

代替使用time()(秒从epoch)的,尝试gettimeofday()。为您提供包含微秒字段的结构。

+3

或在C++ 11中使用''。 – chris

9

这是使用C++11计时库便携式方法:

std::string time_in_HH_MM_SS_MMM() 
{ 
    using namespace std::chrono; 

    // get current time 
    auto now = system_clock::now(); 

    // get number of milliseconds for the current second 
    // (remainder after division into seconds) 
    auto ms = duration_cast<milliseconds>(now.time_since_epoch()) % 1000; 

    // convert to std::time_t in order to convert to std::tm (broken time) 
    auto timer = system_clock::to_time_t(now); 

    // convert to broken time 
    std::tm bt = *std::localtime(&timer); 

    std::ostringstream oss; 

    oss << std::put_time(&bt, "%T"); // HH:MM:SS 
    oss << '.' << std::setfill('0') << std::setw(3) << ms.count(); 

    return oss.str(); 
} 
+0

真的吗?你得到3位数的毫秒? –

+0

不错的编辑;你需要那个'setw(3)'。 –

相关问题