c 언어/c 표준 라이브러리(Standard C Library)

C 언어 표준 API - time.h의 시간 변환 및 포맷팅 (strftime, gmtime, localtime)

임베디드 친구 2025. 2. 23. 15:54
728x90
반응형

C 언어 표준 API - time.h의 시간 변환 및 포맷팅 (strftime, gmtime, localtime)

C 언어에서 시간을 다룰 때 time.h 헤더 파일을 사용합니다. 특히, strftime, gmtime, localtime 함수는 시간을 변환하고 포맷팅하는 데 유용합니다. 이번 포스팅에서는 이 세 가지 함수에 대해 설명하고 예제 코드를 통해 활용 방법을 익혀보겠습니다.

1. gmtimelocaltime 함수

1.1 gmtime 함수

gmtime 함수는 time_t 타입의 값을 받아 UTC(세계 협정시) 기준의 struct tm 구조체로 변환합니다.

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

int main() {
    time_t raw_time;
    struct tm *gmt;

    time(&raw_time); // 현재 시간을 가져옴
    gmt = gmtime(&raw_time); // UTC 기준으로 변환

    printf("UTC 시간: %d-%02d-%02d %02d:%02d:%02d\n",
           gmt->tm_year + 1900, gmt->tm_mon + 1, gmt->tm_mday,
           gmt->tm_hour, gmt->tm_min, gmt->tm_sec);

    return 0;
}

실행 결과 (예시)

UTC 시간: 2025-01-31 12:34:56

1.2 localtime 함수

localtime 함수는 time_t 값을 현재 시스템의 로컬 시간대로 변환하여 struct tm 구조체를 반환합니다.

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

int main() {
    time_t raw_time;
    struct tm *local;

    time(&raw_time); // 현재 시간을 가져옴
    local = localtime(&raw_time); // 로컬 시간으로 변환

    printf("로컬 시간: %d-%02d-%02d %02d:%02d:%02d\n",
           local->tm_year + 1900, local->tm_mon + 1, local->tm_mday,
           local->tm_hour, local->tm_min, local->tm_sec);

    return 0;
}

실행 결과 (예시, 한국 시간 기준)

로컬 시간: 2025-01-31 21:34:56

2. strftime을 활용한 시간 포맷팅

2.1 strftime 함수 개요

strftime 함수는 struct tm 구조체를 포맷 문자열에 맞춰 원하는 형식으로 변환해주는 함수입니다. 사용법은 다음과 같습니다.

size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
  • s: 변환된 문자열을 저장할 버퍼
  • max: 버퍼의 최대 크기
  • format: 포맷 문자열
  • tm: 변환할 struct tm 구조체 포인터

2.2 주요 포맷 지정자

지정자 의미 예시
%Y 연도 (4자리) 2025
%y 연도 (2자리) 25
%m 월 (2자리) 01
%d 일 (2자리) 31
%H 시간 (24시간제) 21
%I 시간 (12시간제) 09
%M 34
%S 56
%p AM/PM 표시 PM
%A 요일 (긴 형식) Friday
%a 요일 (짧은 형식) Fri
%B 월 (긴 형식) January
%b 월 (짧은 형식) Jan
%Z 타임존 KST

2.3 strftime 예제 코드

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

int main() {
    time_t raw_time;
    struct tm *time_info;
    char buffer[80];

    time(&raw_time); // 현재 시간을 가져옴
    time_info = localtime(&raw_time); // 로컬 시간 변환

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S (%A, %B %d, %Y)", time_info);
    printf("포맷팅된 시간: %s\n", buffer);

    return 0;
}

실행 결과 (예시)

포맷팅된 시간: 2025-01-31 21:34:56 (Friday, January 31, 2025)

3. gmtime vs localtime 차이

함수 반환 시간 설명
gmtime UTC (세계 협정시) 국제 표준 시간으로 변환
localtime 시스템의 로컬 시간 시스템 시간대(TZ)에 맞춰 변환

활용 예시

  • 서버 응용: UTC 기준 시간 저장 시 gmtime 사용
  • 사용자 인터페이스: 로컬 시간으로 출력 시 localtime 사용

4. 마무리

이번 포스팅에서는 time.hgmtime, localtime, strftime 함수에 대해 알아보았습니다. 이 함수들을 활용하면 시간 정보를 UTC 또는 로컬 시간으로 변환하고, 다양한 형식으로 포맷팅할 수 있습니다. 특히 strftime을 활용하면 사람이 읽기 쉬운 형태로 시간을 출력할 수 있어 유용합니다.

반응형