언어/C언어

[C언어] 시간 Format 함수 사용 방법 - strftime, strptime

REAKWON 2022. 4. 5. 16:09

strftime

strftime은 시간 커스텀할 수 있게 만들어준 문자열 서식화 함수인데요. 문자열에 날짜에 대한 형식을 지정하면 문자열에 시간에 대한 정보가 들어옵니다. strftime의 원형은 다음과 같습니다.

#include <time.h>

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);

 

time.h를 include해야합니다. 

s : 담을 문자열입니다.

max : 문자열의 최대 길이를 지정합니다.

format : 여기에 서식화할 format문자가 들어갑니다. 

tm : 시간정보를 담은 tm구조체가 들어와야합니다. tm구초제는 아래와 같이 정의되어있습니다.

struct tm {
   int tm_sec;    /* 초 (0-60) */
   int tm_min;    /* 분 (0-59) */
   int tm_hour;   /* 시간 (0-23) */
   int tm_mday;   /* 월의 일 (1-31) */
   int tm_mon;    /* 월(0부터 시작) (0-11) */
   int tm_year;   /* 년 */
   int tm_wday;   /* 주의 일 (0-6, Sunday = 0) */
   int tm_yday;   /* 년의 일 (0-365, 1 Jan = 0) */
   int tm_isdst;  /* Daylight saving time */
};

 

반환 : 성공시 문자열의 크기, 실패시 0이 반환됩니다.

 

format의 문자는 매우 다양합니다. 아래의 표로 정리하긴했지만, 이것보다 훨씬 많습니다. 여기에 나오지 않는 format문자는 인터넷 서치하시거나 매뉴얼 페이지를 보시기바랍니다.

format 문자 설명
%a 짧은 요일 이름 Thu
%A 긴 요일 이름 Thursday
%b, %h 짧은 달 이름 Jan
%B 긴 달 이름 January
%c 날짜 + 시간 Tue Apr  5 15:35:05 2022
%C 두자리 연도(00-99) 20
%d 그달의 일(01-31) 30
%D 날짜(MM/DD/YY) 04/05/22
%e 그 달의 일(1-31) 10
%H 그 날의 시(24시간) 23
%I 그 날의 시(12시간) 11
%m 달(01-12) 02
%M 분(00-59) 55
%p 오전/오후 PM
%S 초(00-60) 30
%T %H:%M:%S 12:30:24
%R %H:%M 12:30
%r 12시간 형식의 로컬 시간 05:40:12 PM

 

아래는 이러한 strftime함수를 사용한 예입니다.

#include <time.h>
#include <stdio.h>

int main() {
    time_t now;
    struct tm* t;
    char buf[128] = { 0, };

    time(&now);
    t = localtime(&now);
    if (strftime(buf, sizeof(buf), "current - %c", t) == 0) {
        printf("strftime 실패\n");
        return -1;
    }
    printf("%s\n", buf);

    return 0;
}

 

 

오늘은 4월 5일로 나무 심으러 가도록 합시다.

strptime

strptime함수도 존재하는데, strftime의 역이라고 생각하시면 됩니다. formatting된 문자열에서 시간 구조체인 tm을 얻을 때 사용합니다.

char *strptime(const char *s, const char *format, struct tm *tm);

 

파라미터 설명은 넘어가도록 하고 사용 예를 보도록 하겠습니다.

#include <stdio.h>
#include <string.h>
#include <time.h>

int main(void){
        struct tm tm;
        char buf[255];

        memset(&tm, 0, sizeof(struct tm));
        strptime("2020-09-21 07:09:30", "%Y-%m-%d %H:%M:%S", &tm);
        printf("%d/%d/%d %d:%d:%d\n",tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
                                        tm.tm_hour, tm.tm_min, tm.tm_sec);
}

 

시간을 나타내는 문자열 서식화 함수 strftime과 strptime을 알아보았습니다.

반응형