시간 다루기
이번 강의에서는 C 언어에서 시간을 다루는 방법에 대해 알아보겠습니다. C 언어에서는 시간을 다루기 위해 <time.h>
헤더 파일과 관련된 함수들을 사용합니다. 이 헤더 파일에서는 시간과 날짜를 표현하기 위한 구조체와, 시간과 날짜를 다루기 위한 함수들이 제공됩니다.
시간 구조체
C 언어에서는 시간을 표현하기 위해 time_t
타입과 struct tm
구조체를 사용합니다. time_t
타입은 1970년 1월 1일 0시 0분 0초부터 현재까지 경과한 시간을 초 단위로 저장하는 정수형 변수입니다. struct tm
구조체는 시간을 연도, 월, 일, 시, 분, 초 단위로 나누어 저장하는 구조체입니다.
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; // 년도 (예: 2022는 122)
int tm_wday; // 주의 요일 (0~6, 0은 일요일)
int tm_yday; // 연중 일수 (0~365, 1월 1일은 0)
int tm_isdst; // 일광 절약 시간제
};
시간 함수
<time.h>
헤더 파일에서 제공하는 시간 함수를 사용하면, 시간을 다루는 다양한 기능을 구현할 수 있습니다.
time 함수
time
함수는 1970년 1월 1일 0시 0분 0초부터 현재까지 경과한 시간을 초 단위로 반환합니다. 이 함수는 다음과 같이 사용할 수 있습니다.
time_t time(time_t *timeptr);
timeptr
인자를 NULL
로 지정하면 현재 시간을 초 단위로 반환합니다. timeptr
인자에 주소를 전달하면 해당 주소에 현재 시간을 저장한 후, 현재 시간을 초 단위로 반환합니다.
localtime 함수
localtime
함수는 time_t
타입으로 저장된 시간을 지역 시간 구조체(struct tm
)로 변환합니다. 이 함수는 다음과 같이 사용할 수 있습니다.
struct tm *localtime(const time_t *timeptr);
timeptr
인자에 변환할 시간을 전달하면, 해당 시간을 지역 시간 구조체로 변환하여 반환합니다.
mktime 함수
mktime
함수는 struct tm
구조체로 표현된 시간을 time_t
타입으로 변환합니다. 이 함수는 다음과 같이 사용할 수 있습니다.
time_t mktime(struct tm *timeptr);
timeptr
인자에 변환할 시간을 저장한 struct tm
구조체를 전달하면, 해당 시간을 초 단위로 변환하여 반환합니다.
strftime 함수
strftime
함수는 지정된 형식에 맞게 날짜와 시간을 문자열로 변환합니다. 이 함수는 다음과 같이 사용할 수 있습니다.
size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr);
str
인자에 변환된 문자열을 저장할 배열을 전달하고, maxsize
인자에 배열의 크기를 전달합니다. format
인자에 출력할 형식을 지정하며, %
기호와 옵션 문자를 조합하여 사용합니다. timeptr
인자에는 변환할 시간을 저장한 struct tm
구조체를 전달합니다.
예제
이제 위에서 소개한 함수들을 사용하여 현재 시간을 출력하는 예제를 작성해보겠습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t now = time(NULL); // 초 단위로 현재 시간을 구함
struct tm *ptm = localtime(&now); // 초 단위로 구한 현재 시간을 지역 시간 구조체로 변환
char datetime[20]; // 문자열로 변환한 날짜와 시간을 저장할 배열
// 현재 시간을 문자열로 변환
strftime(datetime, sizeof(datetime), "%Y-%m-%d %H:%M:%S", ptm);
// 변환된 문자열을 출력
printf("현재 날짜 및 시간: %s\n", datetime);
return 0;
}
위 예제 코드에서는 먼저 time
함수로 현재 시간을 초 단위로 구하고, localtime
함수를 사용해 초 단위로 구한 현재 시간을 지역 시간 구조체(struct tm
)로 변환하였습니다. 그리고 strftime
함수를 사용해 지정한 형식에 맞게 문자열로 변환하였습니다. 변환된 문자열은 printf
함수를 사용해 출력하였습니다.
C 언어로 현재 날짜 및 시간 구하기
코드: current_time_localtime.c, 현재날짜및시간구하기.c
/*
날짜 및 구하기: time(), localtime()
*/
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <time.h>
void main(void)
{
// 날짜 관련 구조체 변수 선언
time_t now;
struct tm t;
// 전체 시간의 초
time(&now);
// 초를 기준으로 현재시간을 구함
t = *localtime(&now);
// 날짜 및 시간 출력
printf("Now : %4d년 %d월 %d일 %d시 %d분 %d초\n"
, t.tm_year + 1900
, t.tm_mon + 1
, t.tm_mday
, t.tm_hour
, t.tm_min
, t.tm_sec
);
return 0;
}
Now: 2022년 11월 8일 0시 18분 32초