std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put
|
헤더 파일에 정의됨
<locale>
|
||
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(1) | |
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(2) | |
|
protected
:
virtual
iter_type do_put
(
iter_type out,
std::
ios_base
&
str,
|
(3) | |
std::tm
객체가 가리키는 캘린더 날짜와 시간을
형식 문자열
[fmtbeg, fmtend)
에 따라 문자 문자열로 변환합니다. 형식 문자열은
std::
strftime
에서 사용하는 것과 동일하지만, 각 형식 지정자는 개별적인
do_put()
호출을 통해 처리되며, 이 패싯을 확장하여 커스터마이즈할 수 있습니다.
[fmtbeg, fmtend)
를 순회하며 문자들을 검사합니다. 형식 시퀀스의 일부가 아닌 모든 문자는 즉시 출력 반복자
out
에 기록됩니다. 형식 시퀀스를 식별하기 위해, 이 함수는
[fmtbeg, fmtend)
내의 다음 문자
c
를 마치
std::
ctype
<
char_type
>
(
str.
getloc
(
)
)
.
narrow
(
c,
0
)
를 사용하여 좁힌 것처럼 처리하고, 그것이
'%'
와 같으면, 다음 한두 문자를
std::strftime
가 인식하는 형식 시퀀스 목록과 이 로캘에서 지원하는 추가 구현 정의 형식들과 비교합니다. 각 유효한 형식 시퀀스에 대해
do_put
(
out, str, fill, t, format, modifier
)
호출이 수행되며, 여기서
format
은 형식 시퀀스 문자이고,
modifier
은 선택적 형식 시퀀스 수정자(
'E'
또는
'O'
)입니다. 수정자가 없을 경우
'
\0
'
값이 사용됩니다.
do_put
멤버 함수를 호출합니다.
목차 |
매개변수
| out | - | 변환 결과가 기록되는 출력 반복자 |
| str | - | 필요할 때 로케일 패싯을 얻기 위해 이 함수가 사용하는 스트림 객체, 예를 들어 std::ctype 으로 문자를 축소(narrow)할 때 |
| t | - | 날짜/시간 값을 얻어오는 std::tm 객체에 대한 포인터 |
| fmtbeg | - |
변환 형식
을 지정하는
char_type
문자 시퀀스의 첫 번째 문자를 가리키는 포인터
|
| fmtend | - |
변환 형식
을 지정하는
char_type
문자 시퀀스의 마지막 문자 다음을 가리키는 포인터
|
| fill | - | 채움 문자 (보통 공백) |
| format | - | 변환 지정자 를 명명하는 문자 |
| modifier | - |
%
와
변환 지정자
사이에 나타날 수 있는 선택적 수정자
|
형식 문자열
형식 문자열은 0개 이상의 변환 지정자와 일반 문자들(
%
제외)로 구성됩니다. 모든 일반 문자들은 종료 널 문자를 포함하여 수정 없이 출력 문자열에 복사됩니다. 각 변환 지정은
%
문자로 시작하며, 선택적으로
E
또는
O
수식어(로캘에서 지원되지 않을 경우 무시됨)가 뒤따르고, 해당 지정자의 동작을 결정하는 문자로 끝납니다. 다음 형식 지정자들을 사용할 수 있습니다:
|
변환 지정자
|
설명 | 사용된 필드 |
|---|---|---|
%
|
리터럴
%
를 출력합니다. 전체 변환 지정자는
%%
이어야 합니다.
|
|
n
(C++11) |
개행 문자를 기록합니다 | |
t
(C++11) |
수평 탭 문자를 기록합니다 | |
| 연도 | ||
Y
|
연도 를 10진수로 기록합니다, 예: 2017 |
tm_year
|
EY
(C++11) |
대체 표현으로 연도 를 기록합니다. 예를 들어 ja_JP 로케일에서 2011년 (year 2011) 대신 平成23年 (헤이세이 23년)과 같이 표시됩니다. |
tm_year
|
y
|
연도
의 마지막 두 자리를 십진수로 기록 (범위
[00,99]
)
|
tm_year
|
Oy
(C++11) |
연도의 마지막 두 자리를 대체 숫자 체계를 사용하여 기록합니다. 예: ja_JP 로캘에서 11 대신 十一 |
tm_year
|
Ey
(C++11) |
locale의 대체 달력 기간
%EC
에서의 오프셋으로
year
를 기록합니다
(locale-dependent) |
tm_year
|
C
(C++11) |
연도
의 첫 2자리를 10진수로 기록합니다 (범위
[00,99]
)
|
tm_year
|
EC
(C++11) |
로케일의 대체 표현으로 기준 연도(기간) 의 이름을 기록합니다. 예: ja_JP 로케일에서 平成 (헤이세이 시대) |
tm_year
|
G
(C++11) |
ISO 8601 주 기반 연도
를 기록합니다. 즉, 지정된 주를 포함하는 연도입니다.
ISO 8601에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:
|
tm_year
,
tm_wday
,
tm_yday
|
g
(C++11) |
ISO 8601 주 기반 연도
의 마지막 두 자리를 기록합니다. 즉, 지정된 주를 포함하는 연도(범위
[00,99]
).
ISO 8601에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:
|
tm_year
,
tm_wday
,
tm_yday
|
| 월 | ||
b
|
약식 월 이름
을 기록합니다, 예:
Oct
(로캘에 따라 다름)
|
tm_mon
|
h
(C++11) |
b
의 동의어
|
tm_mon
|
B
|
전체 월
이름을 기록합니다, 예:
October
(로캘에 따라 다름)
|
tm_mon
|
m
|
월을 십진수로 기록합니다 (범위
[01,12]
)
|
tm_mon
|
Om
(C++11) |
월(month) 을 대체 숫자 체계로 출력합니다. 예: ja_JP 로케일에서 12 대신 十二 |
tm_mon
|
| 주간 | ||
U
|
연중 주차를 십진수로 기록합니다(일요일이 주의 첫 번째 날) (범위
[00,53]
)
|
tm_year
,
tm_wday
,
tm_yday
|
OU
(C++11) |
연중 주 번호
를 기록하며,
%U
와 동일하지만 대체 숫자 체계를 사용합니다. 예를 들어 ja_JP 로케일에서 52 대신 五十二를 사용합니다
|
tm_year
,
tm_wday
,
tm_yday
|
W
|
연중 주(週)를 십진수로 기록합니다(월요일이 첫 번째 날입니다)(범위
[00,53]
)
|
tm_year
,
tm_wday
,
tm_yday
|
OW
(C++11) |
연중 주차
를 기록하며,
%W
와 동일하지만 대체 숫자 체계를 사용합니다. 예: ja_JP 로케일에서 52 대신 五十二
|
tm_year
,
tm_wday
,
tm_yday
|
V
(C++11) |
ISO 8601 주 연도
를 기록합니다
(범위
[01,53]
).
ISO 8601에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:
|
tm_year
,
tm_wday
,
tm_yday
|
OV
(C++11) |
연중 주
를 기록하며,
%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
(C++11) |
대체 숫자 체계를 사용하여 0-기반의
월 중 일자
를 기록합니다. 예: ja_JP 로케일에서 27 대신 二十七
단일 문자 앞에는 공백이 추가됩니다. |
tm_mday
|
e
(C++11) |
월의 일자
를 10진수로 기록합니다 (범위
[1,31]
).
한 자리 숫자인 경우 앞에 공백이 추가됩니다. |
tm_mday
|
Oe
(C++11) |
대체 숫자 체계를 사용하여 1부터 시작하는
월의 일자
를 기록합니다. 예: ja_JP 로케일에서 27 대신 二十七
단일 문자 앞에는 공백이 추가됩니다. |
tm_mday
|
| 요일 | ||
a
|
축약형 요일 이름을 씁니다, 예:
Fri
(로캘에 따라 다름)
|
tm_wday
|
A
|
전체 요일 이름
을 기록합니다, 예:
Friday
(로케일 의존적)
|
tm_wday
|
w
|
weekday
를 10진수로 기록하며, 일요일은
0
입니다
(범위
[0-6]
)
|
tm_wday
|
Ow
(C++11) |
weekday
를 기록하며, 여기서 일요일은
0
에 해당하고, 대체 숫자 체계를 사용합니다 (예: ja_JP 로케일에서 2 대신 二)
|
tm_wday
|
u
(C++11) |
weekday
를 10진수로 기록하며, 여기서 월요일은
1
입니다 (ISO 8601 형식) (범위
[1-7]
)
|
tm_wday
|
Ou
(C++11) |
weekday
를 기록하며, 여기서 월요일은
1
에 해당하고, 대체 숫자 체계를 사용합니다 (예: ja_JP 로케일에서 2 대신 二)
|
tm_wday
|
| 시, 분, 초 | ||
H
|
시간을 10진수로 기록합니다, 24시간제 (범위
[00-23]
)
|
tm_hour
|
OH
(C++11) |
24시간 시계에서 시간 을 대체 숫자 체계로 기록합니다. 예: ja_JP 로케일에서 18 대신 十八 |
tm_hour
|
I
|
시간을 12시간제로 표시하며, 십진수로 작성합니다(범위
[01,12]
)
|
tm_hour
|
OI
(C++11) |
12시간제 시계에서 시간 을 대체 숫자 체계를 사용하여 기록합니다. 예: ja_JP 로케일에서 06 대신 六 |
tm_hour
|
M
|
분
을 십진수로 기록합니다 (범위
[00,59]
)
|
tm_min
|
OM
(C++11) |
분 을 대체 숫자 체계를 사용하여 기록합니다. 예: ja_JP 로케일에서 25 대신 二十五 |
tm_min
|
S
|
초(second)를 십진수로 기록합니다 (범위
[00,60]
)
|
tm_sec
|
OS
(C++11) |
초 를 대체 숫자 체계를 사용하여 기록합니다. 예: ja_JP 로캘에서 24 대신 二十四 |
tm_sec
|
| 기타 | ||
c
|
표준 날짜 및 시간 문자열
을 기록합니다, 예:
Sun Oct 17 04:41:13 2010
(로캘에 의존적)
|
전체 |
Ec
(C++11) |
대체 날짜 및 시간 문자열을 기록 합니다. 예를 들어 ja_JP 로케일에서 2011년 (year 2011) 대신 平成23年 (year Heisei 23)을 사용합니다 | 전체 |
x
|
지역화된 날짜 표현 을 기록합니다 (로캘에 따라 다름) | 전체 |
Ex
(C++11) |
대체 날짜 표현 을 작성합니다, 예를 들어 ja_JP 로케일에서 2011년 (year 2011) 대신 平成23年 (year Heisei 23)을 사용합니다 | 모두 |
X
|
지역화된 시간 표현 을 기록합니다, 예: 18:40:20 또는 6:40:20 PM (로캘에 따라 다름) | 전체 |
EX
(C++11) |
대체 시간 표현
을 씁니다
(로케일 의존적) |
모두 |
D
(C++11) |
다음과 동일함 "%m/%d/%y" |
tm_mon
,
tm_mday
,
tm_year
|
F
(C++11) |
"%Y-%m-%d" 와 동등함 (ISO 8601 날짜 형식) |
tm_mon
,
tm_mday
,
tm_year
|
r
(C++11) |
지역화된 12시간제 시간을 기록합니다 (로캘에 의존적) |
tm_hour
,
tm_min
,
tm_sec
|
R
(C++11) |
다음과 동일함 "%H:%M" |
tm_hour
,
tm_min
|
T
(C++11) |
"%H:%M:%S" 와 동등함 (ISO 8601 시간 형식) |
tm_hour
,
tm_min
,
tm_sec
|
p
|
지역화된 오전 또는 오후 를 기록합니다 (로캘에 따라 다름) |
tm_hour
|
z
(C++11) |
ISO 8601 형식으로
UTC 기준 오프셋
을 기록합니다 (예:
-0430
). 시간대 정보를 사용할 수 없는 경우에는 아무 문자도 기록하지 않습니다
|
tm_isdst
|
Z
|
로케일 의존적인 시간대 이름 또는 약어 를 기록하며, 시간대 정보를 사용할 수 없는 경우 문자를 기록하지 않음 |
tm_isdst
|
반환값
생성된 마지막 문자 바로 다음을 가리키는 반복자.
참고 사항
오류 처리가 제공되지 않습니다.
fill
문자는 구현 정의 형식 지정자와 패딩 및 채우기 로직을 사용하는
do_put()
의 사용자 정의 오버라이드를 위해 제공됩니다. 이러한 구현들은 일반적으로
str
의 형식 플래그를 활용합니다.
예제
#include <iostream> #include <sstream> #include <iomanip> #include <ctime> void try_time_put(const std::tm* t, const std::string& fmt) { std::cout.imbue(std::locale()); std::cout << "In the locale '" << std::cout.getloc().name() << "' : '"; std::use_facet<std::time_put<char>>(std::cout.getloc()).put( {std::cout}, std::cout, ' ', t, &fmt[0], &fmt[0] + fmt.size()); std::cout << "'\n"; } int main() { std::time_t t = std::time(NULL); std::tm tm = *std::localtime(&t); std::string fmt = "%c"; std::cout << "Using the format string '" << fmt << "' to format the time: " << std::ctime(&t) << '\n'; std::locale::global(std::locale("de_DE.utf8")); try_time_put(&tm, fmt); std::locale::global(std::locale("el_GR.utf8")); try_time_put(&tm, fmt); std::locale::global(std::locale("ja_JP.utf8")); try_time_put(&tm, fmt); }
가능한 출력:
Using the format string '%c' to format the time: Mon Feb 11 22:58:50 2013 In the locale 'de_DE.utf8' : 'Mo 11 Feb 2013 23:02:38 EST' In the locale 'el_GR.utf8' : 'Δευ 11 Φεβ 2013 11:02:38 μμ EST' In the locale 'ja_JP.utf8' : '2013年02月11日 23時02分38秒'
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 164 | C++98 | 매개변수 fill 의 목적이 명확하지 않았음 | 명확하게 지정됨 |
참고 항목
|
(C++11)
|
지정된 형식에 따라 날짜/시간 값을 형식화하고 출력함
(함수 템플릿) |
|
[virtual]
(C++11)
|
지정된 형식에 따라 입력 스트림에서 날짜/시간 구성 요소를 추출함
(
std::time_get<CharT,InputIt>
의 가상 protected 멤버 함수)
|