[C++] 시간을 밀리초 단위까지 추출해서 문자열로 사용

빵욱·2024년 12월 17일

파일이름을 시간데이터로 사용해서 만들어야 할 일이 생겼다.

밀리초 (내가 필요한건 0.11의 단위까지)까지 사용해야 해서 만든 함수 정리


#include <iostream>
#include <fstream> 
#include <chrono>  // 시간을 다루기 위한 C++ 표준 라이브러리.
#include <iomanip> // 출력 포맷을 설정하기 위해 사용 (예: std::setw, std::setfill).
#include <sstream>


std::wstring GetNowTime()
{
    using namespace std::chrono;

    system_clock::time_point now = system_clock::now(); // 현재 시스템 시간 Get

    // time_t로 변환 => time_t: 유닉스 시간(초 단위로 표현된 시간).
    time_t in_time_t = system_clock::to_time_t(now);
     

    // 시간 정보 구조체 초기화
    // localtime_s(&timeInfo, &in_time_t);
    // localtime를 사용하면 Error 발생함. 
    struct tm timeInfo;
    localtime_s(&timeInfo, &in_time_t); // 

    // 밀리초 추출
    // now.time_since_epoch(): 1970년 1월 1일 (UTC 기준) 이후 경과한 시간을 가져온다고 한다.
    auto duration = now.time_since_epoch(); 
    
    // duration_cast<milliseconds> 시간을 밀리초 단위로 변환
    // count(): 시간의 수치 값을 반환
    // % 1000: 밀리초 값만 추출하기 위해 1000으로 나머지 연산
    auto millis = duration_cast<milliseconds>(duration).count() % 1000;
    


    // 파일 이름 생성
    // std::put_time: struct tm 데이터를 포맷팅된 시간 문자열로 출력합니다.

    std::wostringstream wss;
    wss << std::put_time(&timeInfo, L"%Y%m%d_%H%M%S") 
        << L'_' << std::setfill(L'0') << std::setw(3) << millis;

    return wss.str();

    // 밀리초를 따로 저장해서 시간 문자열 포맷팅 뒤에 추가.
}

int main(void)
{
	std::wcout << GetNowTime() << "\n";
}

wstring이 필요해서 'wostringstream' 를 사용했는데 string이 필요하면 'ostringstream'를 사용하면 된다.

profile
rove drink eat

0개의 댓글