이 글에서는 C++ STL의 localtime() 함수가 어떻게 동작하는지, 그리고 그 문법과 실제 활용 예제까지 자세히 살펴보겠습니다.
localtime() 함수란?
localtime() 함수는 C++ STL에 내장된 함수로, <ctime> 헤더 파일에 정의되어 있습니다. 이 함수는 주어진 시간 값을 시스템의 현지 시간(지역 시간)으로 변환하는 데 사용됩니다.
함수는 timer 포인터가 참조하는 값을 읽어 tm 구조체에 값을 채워 넣으며, 이 값을 실행 중인 시스템이 설정된 지역 시간대에 맞게 변환합니다.
문법
localtime(time_t *timer);
매개변수
이 함수는 다음 매개변수를 받습니다.
- timer − time_t 타입의 시간 값을 담고 있는 객체를 가리키는 포인터입니다.
반환값
이 함수는 지역 시간대 기준으로 변환된 시간 정보가 저장된 tm 구조체를 가리키는 포인터를 반환합니다. 변환에 실패할 경우 NULL을 반환합니다.
tm 구조체의 주요 멤버
| 멤버 | 설명 | 범위 |
|---|---|---|
| tm_sec | 초 | 0 ~ 61 |
| tm_min | 분 | 0 ~ 59 |
| tm_hour | 시(24시간 기준) | 0 ~ 23 |
| tm_mday | 일 | 1 ~ 31 |
| tm_mon | 월 (0 = 1월) | 0 ~ 11 |
| tm_year | 1900년 이후 경과 연도 | — |
| tm_wday | 요일 (0 = 일요일) | 0 ~ 6 |
| tm_yday | 연중 경과 일수 | 0 ~ 365 |
| tm_isdst | 서머타임(DST) 적용 여부 | — |
예제
#include <bits/stdc++.h>
using namespace std;
int main(){
time_t hold;
hold = time(NULL);
tm* hold_local = localtime(&hold);
cout<<"현재 시스템의 지역 시간은: "<< hold_local->tm_hour << ":"<<hold_local->tm_min << ":"<<hold_local->tm_sec;
return 0;
}
출력 결과
현재 시스템의 지역 시간은: 8:28:57
참고 사항
localtime()은 내부적으로 정적(static) 버퍼를 공유하기 때문에 스레드 세이프하지 않습니다. 따라서 멀티스레드 환경에서는 POSIX 계열의 localtime_r() 또는 C11 표준의 localtime_s()를 사용하는 것이 더 안전합니다. 또한 반환된 포인터는 함수 내부 버퍼를 가리키므로, 필요하다면 별도의 tm 구조체에 값을 복사해 두는 것이 좋습니다.