Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

C/C++ strftime() 함수 완벽 정리 – 날짜와 시간을 문자열로 포맷하는 방법

C/C++ strftime() 함수란?

strftime() 함수는 날짜와 시간 정보를 사용자가 지정한 형식(format)의 문자열로 변환하는 데 사용되는 C 표준 라이브러리 함수입니다. 이 함수는 time.h 헤더 파일에 선언되어 있으며, 성공적으로 실행되면 복사된 문자열의 총 문자 수를 반환하고, 결과 문자열이 지정된 크기(size)보다 커서 들어가지 못하면 0을 반환합니다.

strftime() 함수 문법

size_t strftime(char *string, size_t size, const char *format, const struct tm *time_pointer);

매개변수 설명

string – 변환된 결과가 저장될 대상 배열(destination array)을 가리키는 포인터입니다.
size – 복사할 수 있는 최대 문자 수입니다. 널 종료 문자(null character)를 포함한 크기를 지정해야 합니다.
format – tm 구조체에 담긴 시간을 원하는 형태로 표현하기 위한 특수 형식 지정자(format specifier)입니다.
time_pointer – 달력 시간(calendar time) 정보를 담고 있는 tm 구조체에 대한 포인터입니다.

strftime() 함수 사용 예제

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

int main () {
    time_t tim;
    struct tm *detl;
    char buf[80];

    time(&tim);
    detl = localtime(&tim);

    strftime(buf, 20, "%x - %I:%M%p", detl);
    printf("Date & time after formatting : %s", buf);

    return(0);
}

실행 결과

Date & time after formatting : 10/23/18 - 10:33AM

코드 동작 원리

위 프로그램에서는 서로 다른 데이터 타입의 변수 세 개(tim, detl, buf)가 선언됩니다. 먼저 localtime() 함수가 현재 시스템의 날짜와 시간을 가져와 tm 구조체에 저장합니다. 이후 strftime() 함수가 형식 지정자를 활용해 해당 시간 정보를 지정된 구조의 문자열로 변환하여 버퍼에 복사합니다.

detl = localtime(&tim);
strftime(buf, 20, "%x - %I:%M%p", detl);

여기서 사용된 형식 지정자의 의미는 다음과 같습니다.

  • %x – 로케일(locale) 설정에 따른 날짜 표현 (예: 10/23/18)
  • %I – 12시간제 기준의 시간 (01~12)
  • %M – 분 (00~59)
  • %p – 오전/오후 표시 (AM 또는 PM)

자주 사용되는 주요 형식 지정자

strftime()에서 활용할 수 있는 대표적인 형식 지정자는 다음과 같습니다.

  • %Y – 4자리 연도 (예: 2025)
  • %m – 월 (01~12)
  • %d – 일 (01~31)
  • %H – 24시간제 기준의 시간 (00~23)
  • %S – 초 (00~61)
  • %A – 요일의 전체 이름 (예: Monday)
  • %B – 월의 전체 이름 (예: October)

이처럼 strftime() 함수는 다양한 형식 지정자를 조합하여 날짜와 시간을 원하는 어떤 형태의 문자열로든 자유롭게 변환할 수 있어, 로그 기록이나 사용자 인터페이스에 시간을 출력할 때 매우 유용하게 활용됩니다.