리눅스 시스템에서 제공하는 기본 타임 서비스는 UTC 1970년 1월 1일 00:00:00로부터 시간을 초(second)단위로 카운트하는 것입니다. 그리고 이 값은 time_t 타입으로 표현하는데 정수 형식이라고 보아도 무관합니다.
리눅스 시스템에서는 기본 타임 서비스에서 카운트한 time_t 값을 반환하는 time 함수를 제공합니다. 이 외에 time_t 형식을 년월일시분초 형태로 분할한 일시(struct tm 형식)로 변환하는 gmtime과 localtime 함수가 있습니다. 또한 struct tm 형식을 time_t 형식으로 변환하는 mktime이 있습니다. 그리고 time_t 형식을 문자열로 변환하는 ctime, struct tm 형식을 문자열 변환하는 asctime, struct tm 형식을 원하는 형태의 문자열로 변환하는 strftime 함수를 제공합니다.
#include <time.h >
time_t time(time_t *cp);
struct tm *gmtime(const time_t *cp);
struct tm *localtime(const time_t *cp);
time_t mktime(struct tm *cp);
char *asctime(const struct tm *tp);
char *ctime(const time_t *cp);
size_t strftime(char *buf, size_t msize, const char *format, const struct tm *tp);
struct tm{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst; //summer time
};
포멧, 설명, 예
%a, 간단한 요일, Tue
%A, 완전한 요일, Thesday
%b, 간단한 월, Jan
%B, 완전한 월, January
%c, 날짜와 시각, Tue Jan 20 19:20:24 2017
%d, 월중의 일[01,31], 14
%H, 일중의 시[00,23], 19
%I, 오후/오전 중의 시[00, 12], 09
%j, 년중의 일[001,366], 20
%m, 월[01, 12], 02
%M, 분[00, 59], 20
%P, AM/PM, PM
%S, 초[00, 61], 19
%U, 년중의 주[00,53], 03 (일요일 주수)
%w, 요일[0=일요일, 6], 02
%W, 년중의 주[00,53], 02 (월요일 주수)
%x, 날짜, 01/20/17
%X, 시각, 19:20:24
%y, 년도[00,99], 17
%Y, 년도, 2017
%Z, 시간대, KST
다음은 time 함수로 현재 카운트 시간(UTC 1970년 1월 1일 00:00:00로부터 흘러간 초)을 구한 후에 이를 지역 시각을 구하기 위해 localtime 함수를 호출하고 다시 이를 문자열로 변환하기 위해 asctime함수를 호출한 후에 현재 시각을 출력하는 예제 코드입니다.
/********************************************************************** * ex_time.c * * exmple source – print now time * **********************************************************************/ #include <stdio.h> #include <string.h> #include <time.h> int main(void) { time_t now_time; struct tm *now_date; char buf[100]; time(&now_time); //현재 시각을 구한다. now_date = localtime(&now_time);//초 단위 값을 지역 시각(DateTime)을 구한다. strcpy(buf,asctime(now_date));//버퍼에 현재 시각을 출력 puts(buf); //표준 출력 스트림에 출력 return 0; }
이 외의 다른 시간 관련 함수에 관한 예제는 C언어 표준 라이브러리 함수 가이드(언제나 휴일 출판사, https://ehpub.co.kr)를 참고하세요.