본문 바로가기

C, C++, C#/Tip

[C++]시스템 시간 반환 함수(millisecond)

반응형

이번 포스팅은 시시템 시간 반환 함수에 대한 포스팅입니다.

 

간단하게 [2023.08.11-10:10:10.111] 초 와 같은 string 을 반환 하는 함수입니다.

 

이런 함수는 로그를 남기거나 시간을 기록할때 사용하면 될것 같습니다.

 

 

※ 참고 : Visual Studo 2022버전에서는 정상 작동했는데 2015버전에서는 동작하지 않는 것 같으니 참고하세요

 

include <chrono>
include <ctime>
include <string>
include <memory>

using namespace std;
using namespace std::chrono;

template<typename ... Args>
std::string string_format(const std::string& format, Args ... args)
{
    size_t size = snprintf(nullptr, 0, format.c_str(), args ...) + 1; // Extra space for '\0'
    if (size <= 0) { throw std::runtime_error("Error during formatting."); }
    std::unique_ptr<char[]> buf(new char[size]);
    snprintf(buf.get(), size, format.c_str(), args ...);
    return std::string(buf.get(), buf.get() + size - 1); // We don't want the '\0' inside
}

string datetime_now()
{
    auto now = std::chrono::system_clock::now();

    std::time_t end_time = std::chrono::system_clock::to_time_t(now);
    tm* ptm = localtime(&end_time);

    std::chrono::milliseconds ms = duration_cast<milliseconds>(system_clock::now().time_since_epoch());

    string sResult = string_format("[%04d%02d%02d-%02d%02d%02d.%3f]", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec, ms);

    char buffer[64];
    strftime(buffer, 64, "[%Y%m%d-%H%M%S.%d]", ptm);

    return buffer;
}

 

 

반응형