Namespaces
Variants

std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put

From cppreference.net
std::time_put
Member functions
time_put::put time_put::do_put
헤더 파일에 정의됨 <locale>
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

const CharT * fmtbeg, const CharT * fmtend ) const ;
(1)
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier = 0 ) const ;
(2)
protected :

virtual iter_type do_put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier ) const ;
(3)

std::tm 객체가 가리키는 캘린더 날짜와 시간을 형식 문자열 [fmtbeg, fmtend) 에 따라 문자 문자열로 변환합니다. 형식 문자열은 std:: strftime 에서 사용하는 것과 동일하지만, 각 형식 지정자는 개별적인 do_put() 호출을 통해 처리되며, 이 패싯을 확장하여 커스터마이즈할 수 있습니다.

1) 문자 시퀀스 [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 ' 값이 사용됩니다.
2) 가장 파생된 클래스의 do_put 멤버 함수를 호출합니다.
3) std::tm 객체가 가리키는 캘린더 날짜와 시간을 modifier 값이 ' \0 ' 가 아닌 경우 '%' , modifier 값, format 값을 연결하여 형성된 형식 변환 시퀀스에 따라 문자 문자열로 변환합니다. 형식은 std::strftime 함수와 동일하게 해석되지만, 로캘에 의존하는 것으로 설명된 형식들은 이 로캘에 의해 정의되며, 추가 형식 지정자가 지원될 수 있습니다( fill 인수는 이러한 구현 정의 형식 지정자가 사용하도록 제공됩니다). 문자열은 출력 반복자 out 에 기록됩니다.

목차

매개변수

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에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:

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

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

  • 1월 4일을 포함
  • 해당 연도의 첫 번째 목요일을 포함
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에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:

  • 1월 4일을 포함합니다
  • 해당 연도의 첫 번째 목요일을 포함합니다
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 멤버 함수)