Namespaces
Variants

std::chrono:: parse

From cppreference.net
헤더에 정의됨 <chrono>
template < class CharT, class Parsable >
/* 지정되지 않음 */ parse ( const CharT * fmt, Parsable & tp ) ;
(1) (C++20부터)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 지정되지 않음 */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,

Parsable & tp ) ;
(2) (C++20 이후)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 지정되지 않음 */ parse ( const CharT * fmt, Parsable & tp,

std:: basic_string < CharT, Traits, Alloc > & abbrev ) ;
(3) (C++20 이후)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 지정되지 않음 */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,
Parsable & tp,

std:: basic_string < CharT, Traits, Alloc > & abbrev ) ;
(4) (C++20 이후)
template < class CharT, class Parsable >

/* 지정되지 않음 */ parse ( const CharT * fmt, Parsable & tp,

std:: chrono :: minutes & offset ) ;
(5) (C++20 이후)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 지정되지 않음 */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,

Parsable & tp, std:: chrono :: minutes & offset ) ;
(6) (C++20 이후)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 지정되지 않음 */ parse ( const CharT * fmt, Parsable & tp,
std:: basic_string < CharT, Traits, Alloc > & abbrev,

std:: chrono :: minutes & offset ) ;
(7) (C++20 이후)
template < class CharT, class Traits, class Alloc, class Parsable >

/* 지정되지 않음 */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,
Parsable & tp,
std:: basic_string < CharT, Traits, Alloc > & abbrev,

std:: chrono :: minutes & offset ) ;
(8) (C++20 이후)

지정되지 않은 타입의 객체 manip 을 반환하여, 주어진 std:: basic_istream < CharT, Traits > 객체 is 에 대해 표현식 is >> manip 가 다음과 같이 from_stream 을 (한정 없이, 인수 종속 lookup 을 가능하게 하기 위해) 호출합니다:

1) from_stream ( is, fmt, tp )
2) from_stream ( is, fmt. c_str ( ) , tp )
3) from_stream ( is, fmt, tp, std:: addressof ( abbrev ) )
4) from_stream ( is, fmt. c_str ( ) , tp, std:: addressof ( abbrev ) )
5) from_stream ( is, fmt, tp,
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
6) from_stream ( is, fmt. c_str ( ) , tp,
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
7) from_stream ( is, fmt, tp, std:: addressof ( abbrev ) , & offset )
8) from_stream ( is, fmt. c_str ( ) , tp, std:: addressof ( abbrev ) , & offset ) .

표현식 is >> manip std:: basic_istream < CharT, Traits > 타입의 lvalue이며 값은 is 입니다.

이러한 오버로드는 해당 from_stream 표현식이 형성 가능한 경우에만 오버로드 해결에 참여합니다.

구현체는 포맷 문자열에 대한 잠재적으로 매달린 참조를 사용하기 어렵게 만드는 것이 권장됩니다. 예를 들어, 반환 타입을 이동 불가능하게 만들고 operator >> 가 반환 타입의 lvalue를 수용하지 못하도록 방지함으로써 가능합니다.

목차

매개변수

fmt - 형식 문자열 (아래 참조)
tp - 파싱 결과를 저장할 객체
abbrev - %Z 지정자에 해당하는 시간대 약어 또는 이름을 저장할 문자열
offset - %z 지정자에 해당하는 UTC 기준 오프셋을 나타내는 duration

형식 문자열

형식 문자열은 0개 이상의 변환 지정자와 일반 문자로 구성됩니다. 각 일반 문자는 공백 문자와 종료 널 문자를 제외하고, 입력 스트림에서 동일한 문자 하나와 일치하거나, 스트림의 다음 문자가 동일하지 않을 경우 함수가 실패하게 합니다.

각 공백 문자는 입력 스트림에서 0개 이상의 공백 문자와 일치합니다.

각 수정되지 않은 변환 지정자는 % 문자로 시작하며 그 뒤에 지정자의 동작을 결정하는 문자가 옵니다. 일부 변환 지정자는 % 문자 뒤에 E 또는 O 수정자 문자가 삽입되는 수정된 형태를 가집니다. 일부 변환 지정자는 % 문자 뒤에 양의 십진 정수로 주어진 너비 매개변수(아래에서 N 로 표시)가 삽입되는 수정된 형태를 가집니다. 각 변환 지정자는 일치하는 문자들이 아래 표에 따라 날짜 및 시간 타입의 부분으로 해석되도록 합니다.

형식 문자열에서 % 로 시작하지만 아래 변환 지정자 중 하나와 일치하지 않는 문자 시퀀스는 일반 문자로 해석됩니다.

만약 from_stream 이 형식 문자열로 지정된 모든 내용을 파싱하는 데 실패하거나, 완전한 결과를 지정하기에 불충분한 정보만 파싱되거나, 파싱 과정에서 상충되는 정보가 발견되면, is. setstate ( std:: ios_base :: failbit ) 이 호출됩니다.

다음 변환 지정자를 사용할 수 있습니다:

변환
지정자
설명
%% 리터럴 % 문자와 일치합니다.
%n 하나의 공백 문자와 일치합니다.
%t 공백 문자 0개 또는 1개와 일치합니다.
연도
%C
% N C
%EC
세기를 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정된 명령어 %EC 는 로케일의 대체 세기 표현을 해석합니다.

%y
% N y
%Ey
%Oy
연도의 마지막 두 자리 십진수를 파싱합니다. 세기가 다른 방식으로 지정되지 않은 경우(예: %C 사용), [69, 99] 범위의 값은 1969년부터 1999년까지의 연도를 의미하는 것으로 추정되며, [00, 68] 범위의 값은 2000년부터 2068년까지의 연도를 의미하는 것으로 추정됩니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 앞에 오는 0은 허용되지만 필수는 아닙니다.

수정된 명령어 %Ey %Oy 는 로캘의 대체 표현을 해석합니다.

%Y
% N Y
%EY
연도를 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 4입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정 명령어 %EY 는 로캘의 대체 표현을 해석합니다.

%b
%B
%h
로케일의 전체 또는 약식 대소문자 구분 없는 월 이름을 파싱합니다.
%m
% N m
%Om
월을 10진수로 파싱합니다(1월은 1 ). 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정된 명령어 %Om 은 로케일의 대체 표현을 해석합니다.

일자
%d
% N d
%Od
%e
% N e
%Oe
날짜의 일(day of month)을 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 영(零)은 허용되지만 필수는 아닙니다.

수정된 명령어 %Od %Oe 는 로캘의 대체 표현을 해석합니다.

요일
%a
%A
로케일의 전체 또는 약식 대소문자 구분 없는 요일 이름을 파싱합니다.
%u
% N u
ISO 평일을 10진수(1-7)로 파싱합니다. 여기서 월요일은 1 입니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 1입니다. 선행 0이 허용되지만 필수는 아닙니다.
%w
% N w
%Ow
요일을 10진수(0-6)로 파싱합니다. 여기서 일요일은 0 입니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 1입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정된 명령어 %Ow 는 로캘의 대체 표현을 해석합니다.

ISO 8601 주 기반 연도

ISO 8601 표준에 따르면 주(week)는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:

  • 1월 4일을 포함해야 함
  • 해당 연도의 첫 번째 목요일을 포함해야 함
%g
% N g
ISO 8601 주 기반 연도의 마지막 두 자리 숫자를 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행하는 0은 허용되지만 필수는 아닙니다.
%G
% N G
ISO 8601 주 기반 연도를 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 4입니다. 선행 0이 허용되지만 필수는 아닙니다.
%V
% N V
ISO 8601 주 번호를 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.
연중 주/일
%j
% N j
연중 일자를 10진수로 파싱합니다 (1월 1일은 1 ). 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 3입니다. 앞에 오는 0은 허용되지만 필수는 아닙니다.
%U
% N U
%OU
연중 주 번호를 10진수로 파싱합니다. 연중 첫 번째 일요일이 01주차의 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주차에 속합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 영은 허용되지만 필수는 아닙니다.

수정된 명령어 %OU 는 로캘의 대체 표현을 해석합니다.

%W
% N W
%OW
연중 주 번호를 10진수로 파싱합니다. 연중 첫 번째 월요일이 01주 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주에 속합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정된 명령어 %OW 는 로캘의 대체 표현을 해석합니다.

날짜
%D "%m/%d/%y" 와 동일합니다.
%F
% N F
"%Y-%m-%d" 와 동일합니다. 너비가 지정된 경우 %Y 에만 적용됩니다.
%x
%Ex
로케일의 날짜 표현을 파싱합니다.

수정된 명령어 %Ex 는 로케일의 대체 날짜 표현을 해석합니다.

시간대
%H
% N H
%OH
24시간 기준 시간을 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정 명령어 %OH 는 로캘의 대체 표현을 해석합니다.

%I
% N I
%OI
12시간제 시간을 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정 명령어 %OI 는 로케일의 대체 표현을 해석합니다.

%M
% N M
%OM
분을 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.

수정된 명령어 %OM 은 로캘의 대체 표현을 해석합니다.

%S
% N S
%OS
초를 10진수로 파싱합니다. 너비 N 은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 앞에 오는 0은 허용되지만 필수는 아닙니다.

수정된 명령어 %OS 는 로캘의 대체 표현을 해석합니다.

%p 12시간제 시계와 관련된 AM/PM 표기를 해당 로캘에 맞는 표현으로 파싱합니다.
%R "%H:%M" 에 해당합니다.
%T "%H:%M:%S" 와 동일합니다.
%r 해당 로캘의 12시간제 시각을 파싱합니다.
%X
%EX
로케일의 시간 표현을 파싱합니다.

수정된 명령어 %EX 는 로케일의 대체 시간 표현을 해석합니다.

기타
%c
%Ec
로케일의 날짜 및 시간 표현을 파싱합니다.

수정된 명령어 %Ec 는 로케일의 대체 날짜 및 시간 표현을 해석합니다.

%z
%Ez
%Oz
UTC에서의 오프셋을 [+|-]hh[mm] 형식으로 파싱합니다. 예를 들어 -0430 은 UTC보다 4시간 30분 뒤를 나타내고 04 는 UTC보다 4시간 앞을 나타냅니다.

수정된 명령어 %Ez %Oz [+|-]h[h][:mm] 형식을 파싱합니다 (즉, 시와 분 사이에 : 을 요구하고 시간의 선행 영을 선택적으로 만듭니다).

%Z 시간대 약어나 이름을 파싱하며, 다음 문자들만 포함하는 가장 긴 연속 문자열로 취급합니다: A 부터 Z , a 부터 z , 0 부터 9 , - , + , _ , 그리고 / .

예제

#include <chrono>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    auto parse = [&](auto str, auto fmt, auto o)
    {
        std::istringstream is{str};
        is.imbue(std::locale("en_US.utf-8"));
        is >> std::chrono::parse(fmt, o);
        is.fail() ? std::cout << "Parse failed!\n" : std::cout << o << '\n';
    };
    parse("01:02:03", "%H:%M:%S", std::chrono::hours{});
    parse("01:02:03", "%H:%M:%S", std::chrono::minutes{});
    parse("01:02:03", "%H:%M:%S", std::chrono::seconds{});
}

가능한 출력:

1h
62min
3723s

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 3554 C++20 일반 null-terminated 문자 타입 시퀀스에 대한 오버로드가 누락됨 추가됨

참고 항목

제공된 형식에 따라 스트림에서 sys_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 utc_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 tai_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 gps_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 file_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 local_time 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 year 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 month 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 day 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 weekday 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 month_day 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 year_month 을 파싱합니다
(함수 템플릿)
제공된 형식에 따라 스트림에서 year_month_day 을 파싱합니다
(함수 템플릿)
(C++11)
지정된 형식의 날짜/시간 값을 파싱합니다
(함수 템플릿)