[C++] Time 관련 Util 사용.

빵욱·2024년 10월 17일

시간 관련 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를 사용하면 된다.

profile
rove drink eat

0개의 댓글