언어/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을 알아보았습니다.
반응형