시간 관련 Util 사용 메모,,
설명은 코드 내 주석으로 작성.
#include <iostream>
#include <chrono>
using namespace std;
int main(void)
{
std::chrono::system_clock::time_point now = std::chrono::system_clock::now();
// auto now
// time_point 타입은 사람이 사용하기 어려운 타입이라고 함.
std::time_t now_time = std::chrono::system_clock::to_time_t(now);
cout << now_time << "\n";
// localtime_s
// => std::time_t 형식의 now_time을 std::tm 구조체로 변환.
// localtime_s 함수를 통해 time_t 데이터를 tm 데이터로 변경.
std::tm now_local_tm;
localtime_s(&now_local_tm, &now_time);
// 리눅스 환경에서는 localtime_r 함수 사용.
// std::wcsftime는 주어진 std::tm 구조체(local_time)에 있는 시간 정보를 읽어들여,
// 지정한 형식 문자열에 따라 시간을 wchar_t 배열에 기록할 수 있게해준다.
/*
%Y: 4자리 연도 (예: 2024)
%m: 2자리 월 (01~12)
%d: 2자리 일 (01~31)
%H: 2자리 시간 (00~23, 24시간 형식)
%M: 2자리 분 (00~59)
%S: 2자리 초 (00~59)
*/
wchar_t buffer[100];
std::wcsftime(buffer, sizeof(buffer) / sizeof(buffer[0]), L"%Y%m%d_%H%M%S", &now_local_tm);
std::wstring wstr_time(buffer);
wcout << wstr_time << "\n";
// time_t와 tm
/*
time_t는 시간을 초 단위로 저장하는 정수형 타입
time_t는 [Epoch] : 1970년 1월 1일 00:00 : 00 (UTC)이후 경과된 초(second)를 나타내는 시간 형식.
이를 통해 컴퓨터는 시간을 간단한 정수 값으로 처리할 수 있다고한다.
일반적으로 time_t는 정수형 타입으로 정의된다고한다.
운영 체제나 컴파일러에 따라 크기가 다를 수 있습니다(32비트 또는 64비트).
Epoch 이후 경과된 초를 나타내므로, 직접 사람이 읽을 수 있는 형태가 아님.
*/
/*
tm은 사람이 읽을 수 있는 시간 정보를 세분화한 구조체
아래와 같이 정의되어 있다.
struct tm {
int tm_sec; // 초 (0-60)
int tm_min; // 분 (0-59)
int tm_hour; // 시간 (0-23)
int tm_mday; // 일 (1-31)
int tm_mon; // 월 (0-11, 0은 1월)
int tm_year; // 1900년을 기준으로 연도 (현재 연도 - 1900)
int tm_wday; // 요일 (0-6, 0은 일요일)
int tm_yday; // 연중 몇 번째 날인지 (0-365)
int tm_isdst; // 서머타임 적용 여부 (양수이면 적용, 0이면 적용 안 함)
};
*/
}
나는 wstring을 사용해서 wcsftime를 사용했는데 string을 위한 함수는 std::strftime를 사용하면 된다.