시간 다루기

  • 6 minutes to read

이번 강의에서는 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초
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com