C++ 표준 라이브러리는 별도의 날짜 타입을 제공하지 않습니다. 대신 C++은 C 언어로부터 날짜와 시간을 다루는 구조체와 함수들을 그대로 물려받아 사용합니다. 따라서 날짜 및 시간 관련 함수와 구조체에 접근하려면 프로그램 상단에 <ctime> 헤더 파일을 포함시켜야 합니다.
시간 관련 주요 데이터 타입
C++에서 시간과 관련된 대표적인 타입은 네 가지입니다.
- clock_t
- time_t
- size_t
- tm
이 중 clock_t, size_t, time_t는 시스템의 시간과 날짜를 일종의 정수 형태로 표현할 수 있습니다.
tm 구조체
tm 구조체는 날짜와 시간 정보를 C 구조체 형태로 저장하며, 다음과 같은 멤버 변수들을 가지고 있습니다.
struct tm {
int tm_sec; // 분 단위 내의 초 (0 ~ 61)
int tm_min; // 시간 단위 내의 분 (0 ~ 59)
int tm_hour; // 하루 기준 시간 (0 ~ 24)
int tm_mday; // 월 단위 일자 (1 ~ 31)
int tm_mon; // 연 단위 월 (0 ~ 11)
int tm_year; // 1900년 이후 경과한 연도
int tm_wday; // 일요일 이후 경과한 요일 수
int tm_yday; // 1월 1일 이후 경과한 일수
int tm_isdst; // 서머타임 적용 여부
}참고로 tm_mon은 0부터 시작하기 때문에 실제 월을 표시할 때는 1을 더해주어야 하며, tm_year 역시 1900년을 기준으로 한 값이므로 실제 연도를 구하려면 1900을 더해야 합니다.
현재 시스템 시간 조회 예제
현재 시스템의 날짜와 시간을 지역 시간(Local Time) 또는 협정 세계시(UTC) 형태로 가져오려면 아래 예제처럼 작성할 수 있습니다.
#include <iostream>
#include <ctime>
using namespace std;
int main() {
// 현재 시스템 기준의 현재 날짜/시간 가져오기
time_t now = time(0);
// time_t 값을 문자열 형태로 변환
char* dt = ctime(&now);
cout << "지역 날짜 및 시간: " << dt << endl;
// UTC 기준으로 변환하기 위해 tm 구조체 사용
tm *gmtm = gmtime(&now);
dt = asctime(gmtm);
cout << "UTC 날짜 및 시간: " << dt << endl;
return 0;
}실행 결과
지역 날짜 및 시간: Fri Mar 22 13:07:39 2019 UTC 날짜 및 시간: Fri Mar 22 07:37:39 2019
코드 설명
위 예제의 동작 흐름은 다음과 같습니다.
time(0)함수를 호출하여 현재 시스템 시간을time_t타입으로 가져옵니다.ctime()함수는time_t값을 사람이 읽을 수 있는 문자열로 변환합니다.gmtime()함수는time_t값을 UTC 기준의tm구조체로 변환합니다.asctime()함수는tm구조체를 문자열 형태로 변환합니다.
실행 결과를 보면 지역 시간과 UTC 시간 사이에 시차가 존재하는 것을 확인할 수 있습니다. 이는 시스템이 설정된 타임존(예: 한국 표준시 KST는 UTC보다 9시간 빠름)에 따라 지역 시간이 계산되기 때문입니다.