Namespaces
Variants

wcsftime

From cppreference.net
헤더 파일에 정의됨 <wchar.h>
size_t wcsftime ( wchar_t * str, size_t count, const wchar_t * format, const struct tm * time ) ;
(C95부터)

주어진 달력 시간 time 에서 날짜와 시간 정보를 형식 문자열 format 에 따라 null로 종료되는 와이드 문자 문자열 str 로 변환합니다. 최대 count 바이트까지 기록됩니다.

목차

매개변수

str - 출력을 위한 wchar_t 배열의 첫 번째 요소를 가리키는 포인터
count - 기록할 최대 와이드 문자 수
format - 변환 형식 을 지정하는 널 종료 와이드 문자열을 가리키는 포인터

형식 문자열

형식 문자열은 0개 이상의 변환 지정자와 일반 문자들( % 제외)로 구성됩니다. 모든 일반 문자들은 종료 널 문자를 포함하여 수정 없이 출력 문자열에 복사됩니다. 각 변환 지정은 % 문자로 시작하며, 선택적으로 E 또는 O 수식어(로캘에서 지원되지 않을 경우 무시됨)가 뒤따르고, 해당 지정자의 동작을 결정하는 문자로 끝납니다. 다음 형식 지정자들을 사용할 수 있습니다:

변환 지정자
설명 사용된 필드
% 리터럴 % 를 출력합니다. 전체 변환 지정자는 %% 여야 합니다.
n
(C99)
개행 문자를 기록합니다
t
(C99)
수평 탭 문자를 기록합니다
연도
Y 연도 를 10진수로 기록합니다, 예: 2017 tm_year
EY
(C99)
대체 표현으로 연도 를 기록합니다. 예: ja_JP 로케일에서 2011년 대신 平成23年 (헤이세이 23년) tm_year
y 연도 의 마지막 두 자리를 십진수로 기록합니다 (범위 [00,99] ) tm_year
Oy
(C99)
연도 의 마지막 두 자리를 대체 숫자 체계를 사용하여 기록합니다. 예: ja_JP 로캘에서 11 대신 十一 tm_year
Ey
(C99)
locale의 대체 달력 기간 %EC 에서의 오프셋으로 year 를 기록합니다 (locale-dependent) tm_year
C
(C99)
연도의 첫 2자리를 10진수로 기록합니다 (범위 [00,99] ) tm_year
EC
(C99)
로캘의 대체 표현으로 기준 연도(기간) 의 이름을 기록합니다. 예: ja_JP 로캘에서 平成 (헤이세이 시대) tm_year
G
(C99)
ISO 8601 주 기반 연도 를 기록합니다. 즉, 지정된 주를 포함하는 연도입니다.

ISO 8601에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:

  • 1월 4일을 포함함
  • 해당 연도의 첫 번째 목요일을 포함함
tm_year , tm_wday , tm_yday
g
(C99)
ISO 8601 주 기반 연도 의 마지막 두 자리를 기록합니다. 즉, 지정된 주를 포함하는 연도입니다 (범위 [00,99] ).

ISO 8601에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:

  • 1월 4일을 포함합니다
  • 해당 연도의 첫 번째 목요일을 포함합니다
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)
월(month) 을 대체 숫자 체계로 출력합니다. 예: 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에서 주는 월요일부터 시작하며, 연중 첫 번째 주는 다음 요건을 충족해야 합니다:

  • 1월 4일을 포함함
  • 해당 연도의 첫 번째 목요일을 포함함
tm_year , tm_wday , tm_yday
OV
(C99)
연중 주차 를 기록합니다. %V 가 수행하는 방식으로, 대체 숫자 체계를 사용합니다. 예를 들어 ja_JP 로케일에서 52 대신 五十二를 사용합니다. tm_year , tm_wday , tm_yday
연중/월별 날짜
j 연중 일자(day of the year)를 십진수로 기록합니다 (범위 [001,366] ) tm_yday
d 월의 날짜를 십진수 로 기록합니다 (범위 [01,31] ) tm_mday
Od
(C99)
대체 숫자 체계를 사용하여 월의 날짜 를 0부터 시작하는 값으로 기록합니다. 예: ja_JP 로케일에서 27 대신 二十七

단일 문자 앞에는 공백이 추가됩니다.

tm_mday
e
(C99)
일(day) 을 10진수로 출력합니다 (범위 [1,31] ).

한 자리 숫자인 경우 앞에 공백이 추가됩니다.

tm_mday
Oe
(C99)
대체 숫자 체계를 사용하여 1부터 시작하는 월 중 일자 를 기록합니다. 예: ja_JP 로케일에서 27 대신 二十七

단일 문자 앞에는 공백이 추가됩니다.

tm_mday
요일
a 축약된 요일 이름을 씁니다, 예: Fri (로캘에 따라 다름) tm_wday
A 전체 요일 이름 을 기록합니다, 예: Friday (로케일 의존적) tm_wday
w weekday 를 10진수로 기록하며, 일요일은 0 입니다 (범위 [0-6] ) tm_wday
Ow
(C99)
요일 을 기록하며, 여기서 일요일은 0 입니다. 대체 숫자 체계를 사용하며, 예를 들어 ja_JP 로케일에서는 2 대신 二를 사용합니다 tm_wday
u
(C99)
요일 을 10진수로 기록하며, 월요일을 1 로 합니다 (ISO 8601 형식) (범위 [1-7] ) tm_wday
Ou
(C99)
요일 을 기록합니다. 여기서 월요일은 1 에 해당하며, 대체 숫자 체계를 사용합니다 (예: ja_JP 로캘에서 2 대신 二 사용) tm_wday
시, 분, 초
H 시간을 10진수로 기록합니다, 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 초(second)를 십진수로 기록합니다 (범위 [00,60] ) tm_sec
OS
(C99)
를 대체 숫자 체계를 사용하여 기록합니다. 예를 들어 ja_JP 로케일에서 24 대신 二十四를 사용합니다 tm_sec
기타
c 표준 날짜 및 시간 문자열 을 기록합니다, 예: Sun Oct 17 04:41:13 2010 (로캘에 따라 다름) 전체
Ec
(C99)
대체 날짜 및 시간 문자열을 기록합니다 , 예를 들어 ja_JP 로케일에서 2011년 (year 2011) 대신 平成23年 (헤이세이 23년)을 사용합니다 모두
x 지역화된 날짜 표현 을 기록합니다 (로캘에 따라 다름) 전체
Ex
(C99)
대체 날짜 표현 을 작성합니다, 예를 들어 ja_JP 로케일에서 2011년 (year 2011) 대신 平成23年 (year Heisei 23)을 사용합니다 모두
X 지역화된 시간 표현 을 기록합니다, 예: 18:40:20 또는 6:40:20 PM (로캘에 따라 다름) 전체
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)
ISO 8601 형식으로 UTC 기준 오프셋 을 기록합니다 (예: -0430 ). 시간대 정보를 사용할 수 없는 경우에는 아무 문자도 기록하지 않습니다 tm_isdst
Z 로케일 의존적인 시간대 이름 또는 약어 를 기록하며, 시간대 정보를 사용할 수 없는 경우 문자를 기록하지 않음 tm_isdst

반환값

str 가 가리키는 와이드 문자 배열에 쓰여진 와이드 문자 수로, 성공 시 종결 L ' \0 ' 를 포함하지 않습니다. 전체 문자열을 저장하기 전에 count 에 도달한 경우, 0 이 반환되며 내용은 정의되지 않습니다.

예제

#include <locale.h>
#include <stdio.h>
#include <time.h>
#include <wchar.h>
int main(void)
{
    wchar_t buff[40];
    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 (wcsftime(buff, sizeof buff, L"%A %c", &my_time))
        printf("%ls\n", buff);
    else
        puts("wcsftime failed");
    setlocale(LC_ALL, "ja_JP.utf8");
    if (wcsftime(buff, sizeof buff, L"%A %c", &my_time))
        printf("%ls\n", buff);
    else
        puts("wcsftime failed");
}

출력:

Sunday Sun Oct  9 08:10:20 2012
日曜日 2012年10月09日 08時10分20秒

참고문헌

  • C23 표준 (ISO/IEC 9899:2024):
  • 7.29.5.1 wcsftime 함수 (p: TBD)
  • C17 표준 (ISO/IEC 9899:2018):
  • 7.29.5.1 wcsftime 함수 (p: 230-231)
  • C11 표준 (ISO/IEC 9899:2011):
  • 7.29.5.1 wcsftime 함수 (p: 439-440)
  • C99 표준 (ISO/IEC 9899:1999):
  • 7.24.5.1 wcsftime 함수 (p: 385-386)

참고 항목

tm 객체를 사용자 정의 텍스트 표현으로 변환
(함수)
C++ documentation for wcsftime