获取当前时间(以毫秒为单位)或HH:MM:SS:MMM格式

时间:2014-07-10 21:45:54

标签: c++ date

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

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;
}

4 个答案:

答案 0 :(得分:13)

这是一个使用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, "%H:%M:%S"); // HH:MM:SS
    oss << '.' << std::setfill('0') << std::setw(3) << ms.count();

    return oss.str();
}

答案 1 :(得分:1)

这是使用HowardHinnant的date库的更干净的解决方案。

std::string get_time()
{
    using namespace std::chrono;
    auto now = time_point_cast<milliseconds>(system_clock::now());
    return date::format("%T", now);
}

答案 2 :(得分:1)

也许对于Windows:

#include <iostream>
#include <Windows.h>
#include <strsafe.h>

int main()
{
    CHAR sysTimeStr[13] = {};
    SYSTEMTIME systemTime;
    GetLocalTime(&systemTime);
    sprintf_s(sysTimeStr,
        "%u:%u:%u:%u",
        systemTime.wHour,
        systemTime.wMinute,
        systemTime.wSecond,
        systemTime.wMilliseconds);

    std::cout << sysTimeStr;
}

答案 3 :(得分:0)

不要使用time()(自纪元以来的秒数),请尝试gettimeofday()。为您提供包含微秒字段的结构。