반응형
strftime(3)
#include <time.h>
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
시간 구조체인 struct tm을 format된 문자열의 형태로 변환하는 함수입니다.
파라미터
s
- format된 날짜 및 시간 문자열이 저장될 buffer - output
max
- s buffer의 크기
format
- 시간정보에 대한 format정보. format정보는 %문자로 구분합니다.
%a : 현재 locale의 약자 요일(week) 문자열 ex). SUN
%A : 현재 locale의 full 요일(week) 문자열 ex). Sunday
%b : 현재 locale의 약자 월(달) 문자열 ex). JAN
%B : 현재 locale의 full 월(달) 문자열 ex). January
%c : 현재 locale의 full 일시 정보 ex). Mon Jan 30 16:08:19 2017
%C : 현재 locale의 세기(century) 정보 year / 100값 ex). 20
%d : 현재 locale의 일자(day) 정보 ex). 01 ~ 31
%D : 현재 locale의 날짜(2자리 년도)정보 %m/%d/%y ex). 01/30/17
%e : 현재 locale의 일자(day) 정보, %d와 비슷하나 1~9앞에는 space가 붙음 ex). 1~31
%Ec : %c와 같음
%Ex : %x와 같음
%EX : %X와 같음
%Ey : y와 같음
%EY : %Y와 같음
%F : %Y-%m-%d format 예). 2017-01-30
%G : %Y와 같음. 4자리 년도 ex). 2017
%g : 2자리 년도. ex). 17
%h : %b와 같음. 현재 locale의 약자 월(달) 문자열 ex). JAN
%H : 00~23까지의 시간
%I : 01~12까지의 시간
%j : 001 ~ 366까지의 1월 1일부터 현재까지의 날 수
%k : [ 0] ~ [23]까지의 시간. 0 ~ 9까지는 앞에 스페이스 붙음. ex). 9
%l : [ 1] ~ [12]까지의 시간. 0 ~ 9까지는 앞에 스페이스 붙음. ex). 9
%m : 01 ~ 12까지의 월(month)
%M : 00 ~ 59까지의 분 Minute
%n : new line
%Od : %d와 같음
%Oe : %e와 같음
%OH : %H와 같음
%OI : %I와 같음
%Om : %m과 같음
%OM : %M과 같음
%OS : %S와 같음
%Ou : %u와 같음
%OU : %U와 같음
%OV : %V와 같음
%Ow : %w와 같음
%OW : %W와 같음
%Oy : %y와 같음
%p: AM/PM 구분
%P: am/pm 구분
%r: %I:%M:%S %P format의 문자열 ex). 04:05:16 PM
%R: %H:%M format의 시분 문자열 ex). 16:05
%s: 1970-01-01 00:00:00 +0000(UTC) 기준의 초(seconds)
%S: 00 ~ 60까지의 초
%t: tab문자
%T: %H:%M:%S 형태의 24시간 format 문자열. %X와 같음. ex). 16:05:10
%u: 1~7까지의 요일정보 %w는 0 ~ 6까지의 요일정보
%U: 0~53까지의 그 해의 몇번째 주(week)
%V: 1 ~ 53까지의 그 해의 몇번째 주(week). 시작 주(week)가 4일 이상인 주부터 1이 됨.
%w: 0 ~ 6까지의 요일정보 0은 일요일
%W: 00 ~ 53 까지의 그 해의 주정보 01은 처음으로 월요일이 있는 주
%x: %m/%d/%g format(mm/dd/yy) 형태의 날짜 ex). 01/30/17
%X: %H:%M:%S 형태의 24시간 format 문자열. %T와 같음. ex). 16:05:10
%y: 00 ~ 99까지의 2자리 년도
%Y: 4자리 년도
%z: +hhmm 또는 -hhmm의 time zone 표시
%Z: timezone명 ex). KST
%%: %문자 출력
tm
- 변환할 시간 구조체 (struct tm) - input
RETURN
0 이상
- 실제로 변환된 null-terminate된 문자열의 길이. null 문자까지 포함된 길이.
활용 예제
Sample
#include <time.h>
#include <string.h>
#include <stdio.h>
int main(int argc, char **argv)
{
char tmbuf[4096];
struct tm *tm;
time_t t;
t = time(NULL);
tm = localtime(&t);
strftime(tmbuf, 4096,
"a:[%a]\n" /* 현재 locale의 약자 요일(week) 문자열 ex). SUN */
"A:[%A]\n" /* 현재 locale의 full 요일(week) 문자열 ex). Sunday*/
"b:[%b]\n" /* 현재 locale의 약자 월(달) 문자열 ex). JAN */
"B:[%B]\n" /* 현재 locale의 full 월(달) 문자열 ex). January */
"c:[%c]\n" /* 현재 locale의 full 일시 정보 ex). Mon Jan 30 16:08:19 2017 */
"C:[%C]\n" /* 현재 locale의 세기(century) 정보 year / 100값 ex). 20 */
"d:[%d]\n" /* 현재 locale의 일자(day) 정보 ex). 01 ~ 31 */
"D:[%D]\n" /* 현재 locale의 날짜(2자리 년도)정보 %m/%d/%y ex). 01/30/17 */
"e:[%e]\n" /* 현재 locale의 일자(day) 정보, %d와 비슷하나 1~9앞에는 space가 붙음 ex). 1~31 */
"E options\n"
"Ec:[%Ec]\n" /* %c와 같음 */
"Ex:[%Ex]\n" /* %x와 같음 */
"EX:[%EX]\n" /* %X와 같음 */
"Ey:[%Ey]\n" /* y와 같음 */
"EY:[%EY]\n" /* %Y와 같음 */
"F:[%F]\n" /* %Y-%m-%d format 예). 2017-01-30 */
"G:[%G]\n" /* %Y와 같음. 4자리 년도 ex). 2017 */
"g:[%g]\n" /* 2자리 년도. ex). 17 */
"h:[%h]\n" /* %b와 같음. 현재 locale의 약자 월(달) 문자열 ex). JAN */
"H:[%H]\n" /* 00~23까지의 시간 */
"I:[%I]\n" /* 01~12까지의 시간 */
"j:[%j]\n" /* 001 ~ 366까지의 1월 1일부터 현재까지의 날 수*/
"k:[%k]\n" /* [ 0] ~ [23]까지의 시간. 0 ~ 9까지는 앞에 스페이스 붙음. ex). 9 */
"l:[%l]\n" /* [ 1] ~ [12]까지의 시간. 0 ~ 9까지는 앞에 스페이스 붙음. ex). 9 */
"m:[%m]\n" /* 01 ~ 12까지의 월(month) */
"M:[%M]\n" /* 00 ~ 59까지의 분 Minute */
"n:[%n]\n" /* new line */
"O:Options\n"
"Od:[%Od]\n" /* %d와 같음 */
"Oe:[%Oe]\n" /* %e와 같음 */
"OH:[%OH]\n" /* %H와 같음 */
"OI:[%OI]\n" /* %I와 같음 */
"Om:[%Om]\n" /* %m과 같음 */
"OM:[%OM]\n" /* %M과 같음 */
"OS:[%OS]\n" /* %S와 같음 */
"Ou:[%Ou]\n" /* %u와 같음 */
"OU:[%OU]\n" /* %U와 같음 */
"OV:[%OV]\n" /* %V와 같음 */
"Ow:[%Ow]\n" /* %w와 같음 */
"OW:[%OW]\n" /* %W와 같음 */
"Oy:[%Oy]\n" /* %y와 같음 */
"p:[%p]\n" /* AM/PM 구분 */
"P:[%P]\n" /* am/pm 구분 */
"r:[%r]\n" /* %I:%M:%S %P format의 문자열 ex). 04:05:16 PM */
"R:[%R]\n" /* %H:%M format의 시분 문자열 ex). 16:05 */
"s:[%s]\n" /* 1970-01-01 00:00:00 +0000(UTC) 기준의 초(seconds) */
"S:[%S]\n" /* 00 ~ 60까지의 초 */
"t:[%t]\n" /* tab문자 */
"T:[%T]\n" /* %H:%M:%S 형태의 24시간 format 문자열. %X와 같음. ex). 16:05:10 */
"u:[%u]\n" /* 1~7까지의 요일정보 %w는 0 ~ 6까지의 요일정보*/
"U:[%U]\n" /* 0~53까지의 그 해의 몇번째 주(week) */
"V:[%V]\n" /* 1 ~ 53까지의 그 해의 몇번째 주(week). 시작 주(week)가 4일 이상인 주부터 1이 됨. */
"w:[%w]\n" /* 0 ~ 6까지의 요일정보 0은 일요일 */
"W:[%W]\n" /* 00 ~ 53 까지의 그 해의 주정보 01은 처음으로 월요일이 있는 주 */
"x:[%x]\n" /* %m/%d/%g format(mm/dd/yy) 형태의 날짜 ex). 01/30/17 */
"X:[%X]\n" /* %H:%M:%S 형태의 24시간 format 문자열. %T와 같음. ex). 16:05:10 */
"y:[%y]\n" /* 00 ~ 99까지의 2자리 년도 */
"Y:[%Y]\n" /* 4자리 년도 */
"z:[%z]\n" /* +hhmm 또는 -hhmm의 time zone 표시 */
"Z:[%Z]\n" /* timezone명 ex). KST */
"%%:[%%]\n" /* %문자 출력*/
, tm);
printf("%s", tmbuf);
}
결과:
a:[Mon]
A:[Monday]
b:[Jan]
B:[January]
c:[Mon Jan 30 16:05:16 2017]
C:[20]
d:[30]
D:[01/30/17]
e:[30]
E options
Ec:[Mon Jan 30 16:05:16 2017]
Ex:[01/30/17]
EX:[16:05:16]
Ey:[17]
EY:[2017]
F:[2017-01-30]
G:[2017]
g:[17]
h:[Jan]
H:[16]
I:[04]
j:[030]
k:[16]
l:[ 4]
m:[01]
M:[05]
n:[
]
O:Options
Od:[30]
Oe:[30]
OH:[16]
OI:[04]
Om:[01]
OM:[05]
OS:[16]
Ou:[1]
OU:[05]
OV:[05]
Ow:[1]
OW:[05]
Oy:[17]
p:[PM]
P:[pm]
r:[04:05:16 PM]
R:[16:05]
s:[1485759916]
S:[16]
t:[ ]
T:[16:05:16]
u:[1]
U:[05]
V:[05]
w:[1]
W:[05]
x:[01/30/17]
X:[16:05:16]
y:[17]
Y:[2017]
z:[+0900]
Z:[KST]
%:[%]
see also : 시간 관련 함수
반응형
'C언어 header > time.h' 카테고리의 다른 글
nanosleep(2) - 설정된 nano초(nanosecond: 10억분의 1초) 동안 대기 (0) | 2019.09.30 |
---|---|
strptime(3) - format된 문자열 시간을 struct tm으로 변환 (0) | 2019.09.30 |
mktime(3) - struct tm를 time_t로 변환 (0) | 2019.09.30 |
asctime_r(3) - struct tm 구조체를 날짜 및 시간 표시 문자열로 변환(thread-safe) (0) | 2019.09.30 |
asctime(3) - struct tm 구조체를 날짜 및 시간 표시 문자열로 변환 (1) | 2019.09.30 |