이 글에서는 C++ STL에서 제공하는 mktime() 함수의 동작 원리, 문법, 그리고 실제 활용 예제를 자세히 살펴보겠습니다.
mktime() 함수란?
mktime()은 C++ STL에 내장된 함수로, <ctime> 헤더 파일에 정의되어 있습니다. 이 함수는 현지 시간(local time) 정보를 담고 있는 tm 구조체를 time_t 객체로 변환하는 역할을 합니다.
mktime()은 localtime() 함수와 정반대의 기능을 수행하는 함수라고 볼 수 있습니다. localtime()이 time_t 값을 해당 기계의 현지 시간대로 변환해 준다면, mktime()은 그 반대 방향의 변환을 처리합니다.
또한 이 함수는 tm 구조체의 멤버 값이 허용 범위를 벗어나거나, tm_mday 또는 tm_yday처럼 유효하지 않은 값이 들어 있을 경우 이를 자동으로 정규화해 줍니다. 덕분에 개발자가 범위 검증 없이도 안전하게 날짜·시간 계산을 수행할 수 있습니다.
문법(Syntax)
time_t mktime( struct tm* tptr );
매개변수(Parameters)
이 함수는 다음 매개변수를 받습니다.
- tptr − 현지 시간 정보를 담고 있는 tm 구조체에 대한 포인터입니다.
반환값(Return Value)
이 함수는 입력받은 tptr에 대응하는 time_t 값을 반환합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int main(){
time_t hold;
tm* hold_ptr;
char days[7][20] = {"Sunday", "Monday", "tuesday","Wednesday","Thursday","Friday","Saturday" };
int year = 1996;
int month = 9;
int day = 25;
time(&hold);
hold_ptr = localtime(&hold);
hold_ptr->tm_year = year - 1900;
hold_ptr->tm_mon = month - 1;
hold_ptr->tm_mday = day;
mktime(hold_ptr);
cout<<"Day on 25th September 1996 was "<<days[hold_ptr->tm_wday];
return 0;
}코드 설명
위 예제는 특정 날짜가 무슨 요일인지 구하는 프로그램입니다. 동작 순서는 다음과 같습니다.
time()으로 현재 시각을 얻은 뒤,localtime()을 통해 tm 구조체 포인터를 확보합니다.- 구조체 멤버에 원하는 날짜(1996년 9월 25일)를 설정합니다. 이때
tm_year는 1900년 기준,tm_mon은 0부터 시작하므로 각각 1900과 1을 빼주어야 합니다. mktime()을 호출하면 설정된 날짜가 정규화되면서 요일 정보(tm_wday)가 자동으로 계산됩니다.- 계산된 요일 인덱스로 배열에서 요일 이름을 출력합니다.
출력 결과
Day on 25th September 1996 was Wednesday
실행 결과 1996년 9월 25일은 수요일(Wednesday)임을 확인할 수 있습니다. 이처럼 mktime()은 날짜 검증과 요일 계산 등 다양한 시간 관련 작업에 유용하게 활용됩니다.