시간 다루기

  • 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초
더 깊이 공부하고 싶다면
DevLec에서는 실무 중심의 C#, .NET, ASP.NET Core, Blazor, 데이터 액세스 강좌를 단계별로 제공합니다. 현재 수강 가능한 강좌 외에도 더 많은 과정이 준비되어 있습니다.
DevLec.com에서 자세한 커리큘럼을 확인해 보세요.
DevLec 공식 강의
C# Programming
C# 프로그래밍 입문
프로그래밍을 처음 시작하는 입문자를 위한 C# 기본기 완성 과정입니다.
ASP.NET Core 10.0
ASP.NET Core 10.0 시작하기 MVC Fundamentals Part 1 MVC Fundamentals Part 2
웹 애플리케이션의 구조와 MVC 패턴을 ASP.NET Core로 실습하며 익힐 수 있습니다.
Blazor Server
풀스택 웹개발자 과정 Part 1 풀스택 웹개발자 과정 Part 2 풀스택 웹개발자 과정 Part 3
실무에서 바로 활용 가능한 Blazor Server 기반 관리자·포털 프로젝트를 만들어 봅니다.
Data & APIs
Entity Framework Core 시작하기 ADO.NET Fundamentals Blazor Server Fundamentals Minimal APIs
데이터 액세스와 Web API를 함께 이해하면 실무 .NET 백엔드 개발에 큰 도움이 됩니다.
VisualAcademy Docs의 모든 콘텐츠, 이미지, 동영상의 저작권은 박용준에게 있습니다. 저작권법에 의해 보호를 받는 저작물이므로 무단 전재와 복제를 금합니다. 사이트의 콘텐츠를 복제하여 블로그, 웹사이트 등에 게시할 수 없습니다. 단, 링크와 SNS 공유, Youtube 동영상 공유는 허용합니다. www.VisualAcademy.com
박용준 강사의 모든 동영상 강의는 데브렉에서 독점으로 제공됩니다. www.devlec.com