시간 정보를 여러 형식으로 변환할 수 있는데, localtime과 gmtime은 time_t 형 시간 정보를 struct tm형으로 변환한다. 이 형을 한번 살펴보자.
struct tm {
int tm_sec; //초 (0~59)
int tm_min; //분 (0~59)
int tm_hour; //시간 (0~23)
int tm_mday; //일 (1~31)
int tm_mon; //월 (0~11)
int tm_year; //연도(1990~)
int tm_wday; //요일 (0~6)
int tm_yday; //1월 1일 이후의 날짜
int tm_isdst; //썸머타임(양수일 때 유효, 0일때 무효, 음수일 때 사용 불가)
}
함수 이름 | 기능
localtime | time_t형 시간 정보를 struct tm형 지역 시간으로 변환한다.
gmtime | time_t형 시간 정보를 struct tm형 세계 표준 시간으로 변환한다.
기능에 보면 시간 표기의 차이가 있다는 것을 볼 수 있다. 리눅스 설치 시에 지정한 로컬 타임존에 따라서 지역 시간으로 변환하느냐 아니면 글로벌 시간으로 변환하느냐의 차이다. 사용법은 아래의 예시를 확인하자.
이와 반대로 struct tm 형 시간을 time_t형으로 변환하는 함수 또한 존재한다.
함수 이름 | 기능
mktime | struct tm형 시간 정보를 time_t형으로 변환한다.
또한 struct tm형의 시간 정보를 사용자가 알아보기 쉽게 문자열로 변환해주는 함수 또한 존재한다. 기본적으로 제공되는 서식 형태로도 만들 수 있지만, 개발자가 직접 서식을 지정할 수 잇는 함수 또한 존재한다.
함수 이름 | 기능
asctime | struct tm 형 시간 정보를 문자열로 변환한다.
strftime | struct tm형 시간 정보를 서식을 갖춘 시간 정보로 변환한다.
변환에 필요한 변환 형식은 변환 문자열을 확인하여 직접 작성하면 된다. 두 번째에 변환 포맷을 지정할 수 있고, 변환 문자열은 다음과 같다.
변환 문자열 | 의미
%a | 요일 이름의 약자
%A | 요일 이름
%b | 월 이름의 약자
%B | 월 이름
%c | 지역 날짜와 시간
%d | 날짜
%H | 시간 (24시간)
%I | 시간 (12시간)
%j | 1월 1일 이후의 날짜
%m | 월
%M | 분
%p | AM, PM
%S | 초
%w | 요일
%x | 지역 날짜
%X | 지역 시간
%y | 연도
%Y | 연도(4자리수)
%% | 퍼센트 기호
어기까지의 내용만 가지고 예제를 확인해보자. 함수 여럿 좀 써보겠다고 해서 자잘하게 해봤다.
리눅스 시스템 앞에 앉아 있다면 시계가 없어도 date 명령어를 이용하여 현재의 시간을 정확히 알 수 있다. 라이브러리에서는 이렇게 날짜와 시간 관련 함수를 제공하고 있으므로 이를 이용하면 date 명령어와 같이 시스템의 현재 시간을 알아내는 프로그램을 간단하게 구현할 수 있다.
또한 이러한 날짜와 시간 함수를 이용하면 현재 시간을 알 수 있을 뿐만 아니라 사용자들이 보기 좋게 변환하거나 시간차를 구할 수도 있다.
날짜와 시간은 프로그램에서 여러모로 관리되는 기능이기 때문에 날짜와 시간 함수가 사용되는 경우는 많이 존재한다.