strftime
출처: ko.cppreference.net
| 헤더 <time.h>
|
||
size_t strftime( char* str, size_t count,
const char* format, const struct tm* tp );
|
(C99까지) | |
size_t strftime( char* restrict str, size_t count,
const char* restrict format, const struct tm* restrict tp );
|
(C99부터) | |
주어진 달력 시간 tp의 날짜 및 시간 정보를 널 종료 멀티바이트 문자 문자열 str로 변환합니다. 이 변환은 형식 문자열 format에 따라 수행됩니다. 최대 count 바이트가 기록됩니다.
매개변수
| str | - | 출력용 char 배열의 첫 번째 요소를 가리키는 포인터 |
| count | - | 기록할 최대 바이트 수 |
| format | - | 변환 형식을 지정하는 널 종료 멀티바이트 문자 문자열을 가리키는 포인터변환 형식 |
| tp | - | 형식화할 시간을 지정하는 struct tm 객체를 가리키는 포인터
|
형식 문자열
형식 문자열은 0개 이상의 변환 지정자와 일반 문자(% 제외)로 구성됩니다. 종료 널 문자를 포함한 모든 일반 문자는 수정 없이 출력 문자열에 복사됩니다. 각 변환 사양은 % 문자로 시작하며, 선택적으로 E 또는 O 수정자가 뒤따르고(로케일에서 지원하지 않으면 무시됨), 그다음에 지정자의 동작을 결정하는 문자가 옵니다. 다음 형식 지정자를 사용할 수 있습니다:
| 변환 지정자 |
설명 | 사용된 필드 |
|---|---|---|
%
|
리터럴 %을(를) 기록합니다. 전체 변환 사양은 %%이어야 합니다.
|
|
n(C99) |
개행 문자를 기록합니다 | |
t(C99) |
수평 탭 문자를 기록합니다 | |
| 연도 | ||
Y
|
연도를 십진수로 기록합니다(예: 2017) | tm_year
|
EY(C99) |
연도를 대체 표현으로 기록합니다(예: ja_JP 로케일에서 2011년 대신 平成23년) | tm_year
|
y
|
연도의 마지막 두 자리를 십진수로 기록합니다(범위 [00,99])
|
tm_year
|
Oy(C99) |
연도의 마지막 두 자리를 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 11 대신 十一) | tm_year
|
Ey(C99) |
연도를 로케일의 대체 달력 기간 %EC으로부터의 오프셋으로 기록합니다(로케일 종속)
|
tm_year
|
C(C99) |
연도의 처음 두 자리를 십진수로 기록합니다(범위 [00,99])
|
tm_year
|
EC(C99) |
기준 연도(기간)의 이름을 로케일의 대체 표현으로 기록합니다(예: ja_JP에서 平成(헤이세이 시대)) | tm_year
|
G(C99) |
ISO 8601 주 기준 연도를 기록합니다. 즉, 지정된 주를 포함하는 연도입니다.
ISO 8601에서 주는 월요일에 시작하며, 연도의 첫 번째 주는 다음 요구 사항을 충족해야 합니다:
|
tm_year, tm_wday, tm_yday
|
g(C99) |
ISO 8601 주 기준 연도의 마지막 두 자리를 기록합니다. 즉, 지정된 주를 포함하는 연도입니다(범위 [00,99]).
ISO 8601에서 주는 월요일에 시작하며, 연도의 첫 번째 주는 다음 요구 사항을 충족해야 합니다:
|
tm_year, tm_wday, tm_yday
|
| 월 | ||
b
|
약식 월 이름을 기록합니다(예: Oct)(로케일 종속)
|
tm_mon
|
Ob(C23) |
약식 월 이름을 로케일의 대체 표현으로 기록합니다 | tm_mon
|
h(C99) |
b
|
tm_mon
|
B
|
의 동의어전체 월 이름을 기록합니다(예: October)(로케일 종속)
|
tm_mon
|
OB(C23) |
적절한 전체 월 이름을 로케일의 대체 표현으로 기록합니다 | tm_mon
|
m
|
월을 십진수로 기록합니다(범위 [01,12])
|
tm_mon
|
Om(C99) |
월을 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 12 대신 十二) | tm_mon
|
| 주 | ||
U
|
연중 주를 십진수로 기록합니다(일요일이 주의 첫 번째 날)(범위 [00,53])
|
tm_year, tm_wday, tm_yday
|
OU(C99) |
연중 주를 %U과 같이 기록하며, 대체 숫자 체계를 사용합니다(예: ja_JP 로케일에서 52 대신 五十二)
|
tm_year, tm_wday, tm_yday
|
W
|
연중 주를 십진수로 기록합니다(월요일이 주의 첫 번째 날)(범위 [00,53])
|
tm_year, tm_wday, tm_yday
|
OW(C99) |
연중 주를 %W과 같이 기록하며, 대체 숫자 체계를 사용합니다(예: ja_JP 로케일에서 52 대신 五十二)
|
tm_year, tm_wday, tm_yday
|
V(C99) |
ISO 8601 연중 주를 기록합니다(범위 [01,53]).
ISO 8601에서 주는 월요일에 시작하며, 연도의 첫 번째 주는 다음 요구 사항을 충족해야 합니다:
|
tm_year, tm_wday, tm_yday
|
OV(C99) |
연중 주를 %V과 같이 기록하며, 대체 숫자 체계를 사용합니다(예: ja_JP 로케일에서 52 대신 五十二)
|
tm_year, tm_wday, tm_yday
|
| 연중 일/월중 일 | ||
j
|
연중 일을 십진수로 기록합니다(범위 [001,366])
|
tm_yday
|
d
|
월중 일을 십진수로 기록합니다(범위 [01,31])
|
tm_mday
|
Od(C99) |
0부터 시작하는 월중 일을 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 27 대신 二十七)
한 문자 앞에 공백이 옵니다. |
tm_mday
|
e(C99) |
월중 일을 십진수로 기록합니다(범위 [1,31]).
한 자리 숫자 앞에 공백이 옵니다. |
tm_mday
|
Oe(C99) |
1부터 시작하는 월중 일을 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 27 대신 二十七)
한 문자 앞에 공백이 옵니다. |
tm_mday
|
| 요일 | ||
a
|
약식 요일 이름을 기록합니다(예: Fri)(로케일 종속)
|
tm_wday
|
A
|
전체 요일 이름을 기록합니다(예: Friday)(로케일 종속)
|
tm_wday
|
w
|
요일을 십진수로 기록합니다. 일요일은 0입니다(범위 [0-6])
|
tm_wday
|
Ow(C99) |
요일을 기록합니다. 일요일은 0이며, 대체 숫자 체계를 사용합니다(예: ja_JP 로케일에서 2 대신 二)
|
tm_wday
|
u(C99) |
요일을 십진수로 기록합니다. 월요일은 1입니다(ISO 8601 형식)(범위 [1-7])
|
tm_wday
|
Ou(C99) |
요일을 기록합니다. 월요일은 1이며, 대체 숫자 체계를 사용합니다(예: ja_JP 로케일에서 2 대신 二)
|
tm_wday
|
| 시, 분, 초 | ||
H
|
시를 십진수로 기록합니다. 24시간제(범위 [00-23])
|
tm_hour
|
OH(C99) |
시를 24시간제에서 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 18 대신 十八) | tm_hour
|
I
|
시를 십진수로 기록합니다. 12시간제(범위 [01,12])
|
tm_hour
|
OI(C99) |
시를 12시간제에서 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 06 대신 六) | tm_hour
|
M
|
분을 십진수로 기록합니다(범위 [00,59])
|
tm_min
|
OM(C99) |
분을 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 25 대신 二十五) | tm_min
|
S
|
초를 십진수로 기록합니다(범위 [00,60])
|
tm_sec
|
OS(C99) |
초를 대체 숫자 체계를 사용하여 기록합니다(예: ja_JP 로케일에서 24 대신 二十四) | tm_sec
|
| 기타 | ||
c
|
표준 날짜 및 시간 문자열을 기록합니다(예: Sun Oct 17 04:41:13 2010)(로케일 종속)
|
모두 |
Ec(C99) |
대체 날짜 및 시간 문자열을 기록합니다(예: ja_JP 로케일에서 2011년 대신 平成23년 사용) | 모두 |
x
|
지역화된 날짜 표현을 기록합니다(로케일 종속) | 모두 |
Ex(C99) |
대체 날짜 표현을 기록합니다(예: ja_JP 로케일에서 2011년 대신 平成23년 사용) | 모두 |
X
|
지역화된 시간 표현을 기록합니다(예: 18:40:20 또는 오후 6:40:20)(로케일 종속) | 모두 |
EX(C99) |
대체 시간 표현을 기록합니다(로케일 종속) | 모두 |
D(C99) |
"%m/%d/%y" | tm_mon와 동일, tm_mday, tm_year
|
F(C99) |
"%Y-%m-%d"와 동일(ISO 8601 날짜 형식) | tm_mon, tm_mday, tm_year
|
r(C99) |
지역화된 12시간제 시간을 기록합니다(로케일 종속) | tm_hour, tm_min, tm_sec
|
R(C99) |
"%H:%M" | tm_hour과 동일, tm_min
|
T(C99) |
"%H:%M:%S"와 동일(ISO 8601 시간 형식) | tm_hour, tm_min, tm_sec
|
p
|
지역화된 오전 또는 오후를 기록합니다(로케일 종속) | tm_hour
|
z(C99) |
UTC로부터의 오프셋을 ISO 8601 형식으로 기록합니다(예: -0430). 시간대 정보를 사용할 수 없으면 문자를 기록하지 않습니다.
|
tm_isdst
|
Z
|
로케일 종속적인 시간대 이름 또는 약어를 기록합니다. 시간대 정보를 사용할 수 없으면 문자를 기록하지 않습니다. | tm_isdst
|
반환값
성공 시 str이 가리키는 문자 배열에 기록된 바이트 수(종료 '\0' 제외)입니다. 전체 문자열을 저장하기 전에 count에 도달하면 0이 반환되고 내용은 결정되지 않습니다.
예제
이 코드를 실행하세요
#include <locale.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
char buff[70];
struct tm my_time =
{
.tm_year = 112, // = year 2012
.tm_mon = 9, // = 10th month
.tm_mday = 9, // = 9th day
.tm_hour = 8, // = 8 hours
.tm_min = 10, // = 10 minutes
.tm_sec = 20 // = 20 secs
};
if (strftime(buff, sizeof buff, "%A %c", &my_time))
puts(buff);
else
puts("strftime failed");
setlocale(LC_TIME, "el_GR.utf8");
if (strftime(buff, sizeof buff, "%A %c", &my_time))
puts(buff);
else
puts("strftime failed");
}
가능한 출력:
Sunday Sun Oct 9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST
참조
- C23 표준 (ISO/IEC 9899:2024):
- 7.27.3.5 strftime 함수 (p: TBD)
- C17 표준 (ISO/IEC 9899:2018):
- 7.27.3.5 strftime 함수 (p: 288-291)
- C11 표준 (ISO/IEC 9899:2011):
- 7.27.3.5 strftime 함수 (p: 394-397)
- C99 표준 (ISO/IEC 9899:1999):
- 7.23.3.5 strftime 함수 (p: 343-347)
- C89/C90 표준 (ISO/IEC 9899:1990):
- 4.12.3.5 strftime 함수
같이 보기
(C23에서 폐지됨)(C11) |
tm 객체를 텍스트 표현으로 변환합니다 (함수) |
(C23에서 폐지됨)(C11) |
time_t 객체를 텍스트 표현으로 변환합니다 (함수) |
(C95) |
tm 객체를 사용자 정의 와이드 문자열 텍스트 표현으로 변환합니다 (함수) |
C++ 문서 for strftime
| |