Namespaces
Variants

std:: get_time

From cppreference.net
< cpp ‎ | io ‎ | manip
헤더 파일에 정의됨 <iomanip>
template < class CharT >
/*unspecified*/ get_time ( std:: tm * tmb, const CharT * fmt ) ;
(C++11 이후)

표현식에서 in >> get_time ( tmb, fmt ) 가 사용될 때, 문자 입력을 형식 문자열 fmt 에 따라 현재 입력 스트림 in 에 임베드된 로케일의 std::time_get 패싯에 따라 날짜/시간 값으로 파싱합니다. 결과 값은 std::tm 객체에 저장되며, 이 객체는 tmb 가 가리키는 위치에 있습니다.

목차

매개변수

tmb - 결과가 저장될 std::tm 객체에 대한 유효한 포인터
fmt - pointer to a null-terminated CharT string specifying the conversion format

형식 문자열은 0개 이상의 변환 지정자, 공백 문자, 그리고 일반 문자( % 제외)로 구성됩니다. 각 일반 문자는 대소문자를 구분하지 않는 비교에서 입력 스트림의 한 문자와 일치해야 합니다. 각 공백 문자는 입력 문자열의 임의의 공백과 일치합니다. 각 변환 지정은 % 문자로 시작하며, 선택적으로 E 또는 O 수식어(로캘에서 지원되지 않으면 무시됨)가 뒤따르고, 해당 지정자의 동작을 결정하는 문자로 끝납니다. 형식 지정자는 POSIX 함수 strptime() 과 일치합니다:

변환
지정자
설명 필드에 기록
% 리터럴 % 을 매칭합니다. 전체 변환 지정자는 %% 이어야 합니다 (없음)
t 모든 공백 문자와 일치 (없음)
n 공백 문자와 일치 (없음)
연도
Y 전체 연도 를 4자리 10진수로 파싱하며, 앞에 오는 0은 허용되지만 필수는 아닙니다 tm_year
EY 대체 표현으로 연도 를 파싱합니다. 예: ja_JP 로케일에서 平成23年 (헤이세이 23년)은 tm_year에 2011을 기록합니다 tm_year
y 연도의 마지막 2자리를 10진수로 파싱합니다. year 범위 [69,99] 는 1969~1999 값을, 범위 [00,68] 는 2000~2068을 나타냅니다 tm_year
Oy 연도의 마지막 2자리를 대체 숫자 체계로 파싱합니다. 예를 들어 ja_JP 로케일에서 十一은 11로 파싱됩니다 tm_year
Ey 연도 를 로케일의 대체 달력 기간 %EC 에 대한 오프셋으로 파싱합니다 tm_year
C year 의 첫 2자리를 10진수(범위 [00,99] )로 파싱합니다 tm_year
EC 기준 연도(기간)의 이름을 로캘의 대체 표현으로 파싱합니다. 예: ja_JP 로캘에서 平成 (헤이세이 시대) tm_year
b 월 이름(전체 또는 약어)을 파싱합니다, 예: Oct tm_mon
h b 의 동의어 tm_mon
B b 의 동의어 tm_mon
m 월(month)을 10진수로 파싱합니다 (범위 [01,12] ), 선행하는 0이 허용되지만 필수는 아닙니다 tm_mon
Om 을 대체 숫자 체계를 사용하여 파싱합니다, 예를 들어 ja_JP 로케일에서 十二는 12로 파싱됩니다 tm_mon
주간
U 연중 주차(週次)를 10진수로 파싱합니다 (일요일이 주의 첫 번째 날) (범위 [00,53] ), 선행 0이 허용되지만 필수는 아닙니다 tm_year , tm_wday , tm_yday
OU 연중 주차를 파싱합니다. week of the year , %U 와 동일하게, 대체 숫자 체계를 사용하여 파싱합니다. 예를 들어 ja_JP 로케일에서 五十二는 52로 파싱됩니다 tm_year , tm_wday , tm_yday
W 연중 주차(週次)를 십진수로 파싱합니다 (월요일이 주의 첫 번째 날) (범위 [00,53] ), 선행하는 0이 허용되지만 필수는 아닙니다 tm_year , tm_wday , tm_yday
OW 연중 주차 를 파싱합니다. %W 와 동일하게 동작하며, 대체 숫자 체계를 사용합니다. 예를 들어 ja_JP 로케일에서 五十二는 52로 파싱됩니다. tm_year , tm_wday , tm_yday
연중/월중 날짜
j 연중 일자(day of the year)를 10진수로 파싱합니다 (범위 [001,366] ), 앞에 오는 0은 허용되지만 필수는 아닙니다 tm_yday
d 월의 일 을 10진수로 파싱합니다 (범위 [01,31] ), 선행하는 0이 허용되지만 필수는 아닙니다 tm_mday
Od 월의 날짜를 대체 숫자 체계를 사용하여 파싱합니다. 예를 들어 ja_JP 로케일에서 二十七은 27로 파싱되며, 앞에 오는 0은 허용되지만 필수는 아닙니다 tm_mday
e d 의 동의어 tm_mday
Oe Od 의 동의어 tm_mday
요일
a 요일 이름을 전체 또는 약어로 파싱합니다. 예: Fri tm_wday
A a 의 동의어 tm_wday
w weekday 를 10진수로 파싱하며, 일요일은 0 (범위 [0-6] )입니다 tm_wday
Ow weekday 를 10진수로 파싱하며, 여기서 일요일은 0 에 해당합니다. 대체 숫자 체계를 사용하며, 예를 들어 ja_JP 로케일에서 二는 2로 파싱됩니다 tm_wday
시, 분, 초
H 시간 을 10진수로 파싱합니다, 24시간제 (범위 [00-23] ), 앞에 오는 0이 허용되지만 필수는 아닙니다 tm_hour
OH 24시간제에서 시간 을 대체 숫자 체계로 파싱합니다. 예: ja_JP 로캘에서 十八은 18로 파싱됨 tm_hour
I 12시간제로 hour 를 10진수로 파싱합니다 (범위 [01,12] ), 앞에 오는 0은 허용되지만 필수는 아닙니다 tm_hour
OI 12시간제에서 시간 을 대체 숫자 체계로 파싱합니다. 예: ja_JP 로캘에서 六은 06으로 읽힘 tm_hour
M 을 10진수로 파싱합니다 (범위 [00,59] ), 앞에 오는 0이 허용되지만 필수는 아닙니다 tm_min
OM 을 대체 숫자 체계를 사용하여 파싱합니다. 예를 들어 ja_JP 로케일에서 二十五는 25로 파싱됩니다 tm_min
S 를 10진수로 파싱합니다 (범위 [00,60] ), 앞에 오는 0은 허용되지만 필수는 아닙니다 tm_sec
OS 대체 숫자 체계를 사용하여 second 를 파싱합니다. 예를 들어 ja_JP 로케일에서 二十四는 24로 파싱됩니다 tm_sec
기타
c 로케일의 표준 날짜 및 시간 문자열 형식을 파싱합니다, 예를 들어 Sun Oct 17 04:41:13 2010 (로케일 의존적) 전체
Ec 로캘의 대체 날짜 및 시간 문자열 형식을 파싱합니다. 예를 들어 ja_JP 로캘에서 2011년 (year 2011) 대신 平成23年 (헤이세이 23년)을 기대합니다 all
x 로케일의 표준 날짜 표현을 파싱합니다 전체
Ex 로캘의 대체 날짜 표현을 파싱합니다. 예를 들어 ja_JP 로캘에서 2011년 (year 2011) 대신 平成23年 (헤이세이 23년)을 기대합니다 all
X 로케일의 표준 시간 표현을 파싱합니다 전체
EX 로케일의 대체 시간 표현을 파싱합니다 all
D 다음에 해당함: "%m / %d / %y " tm_mon , tm_mday , tm_year
r 로케일의 표준 12시간제 시각을 파싱합니다 (POSIX에서 "%I : %M : %S %p" ) tm_hour , tm_min , tm_sec
R 다음에 해당함 "%H : %M" tm_hour , tm_min
T "%H : %M : %S" 에 해당함 tm_hour , tm_min , tm_sec
p 해당 로캘의 a.m. 또는 p.m. 에 해당하는 값을 파싱합니다 tm_hour

참고: tm_isdst 필드는 기록되지 않으며, mktime 같은 함수와 함께 사용하려면 명시적으로 설정해야 합니다.


반환값

지정되지 않은 타입의 객체로서

  • 만약 in std:: basic_istream < CharT, Traits > 타입의 객체라면, 표현식 in >> get_time ( tmb, fmt )
    • std:: basic_istream < CharT, Traits > & 타입을 가짐
    • 값은 in 을 가짐
    • 마치 f ( in, tmb, fmt ) 을 호출한 것처럼 동작함

함수 f 가 다음과 같이 정의되는 경우:

template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, std::tm* tmb, const CharT* fmt)
{
    using Iter = std::istreambuf_iterator<CharT, Traits>;
    using TimeGet = time_get<CharT, Iter>;
    std::ios_base::iostate err = std::ios_base::goodbit;
    const TimeGet& tg = std::use_facet<TimeGet>(str.getloc());
    tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb,
        fmt, fmt + Traits::length(fmt));
    if (err != std::ios_base::goodbit)
        str.setstate(err);
}

참고 사항

std::time_get::do_get 에 명시된 바와 같이, 이 함수가 호출하는 do_get 함수는 * tmb 에서 fmt 에 나타나는 변환 지정자로 직접 설정되지 않은 필드들을 0으로 초기화하는지 여부가 명시되어 있지 않습니다: 이식성이 있는 프로그램들은 std::get_time 을 호출하기 전에 * tmb 의 모든 필드를 0으로 초기화해야 합니다.

예제

참고: 출력을 확인하려면 clang 또는 gcc >= 12.1을 선택하십시오. 12.1 이전의 libstdc++은 % b 지정자를 올바르게 구현하지 않습니다: 버그 #78714 .

#include <iomanip>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail())
        std::cout << "Parse failed\n";
    else
        std::cout << std::put_time(&t, "%c") << '\n';
}

가능한 출력:

Sun Feb 18 23:12:34 2011

참고 항목

입력 문자 시퀀스로부터 시간/날짜 값을 std::tm 으로 파싱합니다
(클래스 템플릿)
(C++11)
지정된 형식에 따라 날짜/시간 값을 형식화하고 출력합니다
(함수 템플릿)
(C++20)
스트림으로부터 chrono 객체를 파싱합니다
(함수 템플릿)