std::chrono:: parse
|
헤더에 정의됨
<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,
|
(2) | (C++20 이후) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* 지정되지 않음 */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(3) | (C++20 이후) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* 지정되지 않음 */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(4) | (C++20 이후) |
|
template
<
class
CharT,
class
Parsable
>
/* 지정되지 않음 */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(5) | (C++20 이후) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* 지정되지 않음 */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(6) | (C++20 이후) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* 지정되지 않음 */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(7) | (C++20 이후) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* 지정되지 않음 */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(8) | (C++20 이후) |
지정되지 않은 타입의 객체
manip
을 반환하여, 주어진
std::
basic_istream
<
CharT, Traits
>
객체
is
에 대해 표현식
is
>>
manip
가 다음과 같이
from_stream
을 (한정 없이,
인수 종속 lookup
을 가능하게 하기 위해) 호출합니다:
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & 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이 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
%y
%
N
y
%Ey
%Oy
|
연도의 마지막 두 자리 십진수를 파싱합니다. 세기가 다른 방식으로 지정되지 않은 경우(예: %C 사용), [69, 99] 범위의 값은 1969년부터 1999년까지의 연도를 의미하는 것으로 추정되며, [00, 68] 범위의 값은 2000년부터 2068년까지의 연도를 의미하는 것으로 추정됩니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 앞에 오는 0은 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
%Y
%
N
Y
%EY
|
연도를 10진수로 파싱합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 4입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정 명령어
|
|
| 월 | ||
%b
%B
%h
|
로케일의 전체 또는 약식 대소문자 구분 없는 월 이름을 파싱합니다. | |
%m
%
N
m
%Om
|
월을 10진수로 파싱합니다(1월은
1
). 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
| 일자 | ||
%d
%
N
d
%Od
%e
%
N
e
%Oe
|
날짜의 일(day of month)을 10진수로 파싱합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 영(零)은 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
| 요일 | ||
%a
%A
|
로케일의 전체 또는 약식 대소문자 구분 없는 요일 이름을 파싱합니다. | |
%u
%
N
u
|
ISO 평일을 10진수(1-7)로 파싱합니다. 여기서 월요일은
1
입니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 1입니다. 선행 0이 허용되지만 필수는 아닙니다.
|
|
%w
%
N
w
%Ow
|
요일을 10진수(0-6)로 파싱합니다. 여기서 일요일은
0
입니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 1입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
| ISO 8601 주 기반 연도 | ||
|
ISO 8601 표준에 따르면 주(week)는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:
|
||
%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입니다. 선행 영은 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
%W
%
N
W
%OW
|
연중 주 번호를 10진수로 파싱합니다. 연중 첫 번째 월요일이 01주 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주에 속합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
| 날짜 | ||
%D
|
"%m/%d/%y"
와 동일합니다.
|
|
%F
%
N
F
|
"%Y-%m-%d"
와 동일합니다. 너비가 지정된 경우
%Y
에만 적용됩니다.
|
|
%x
%Ex
|
로케일의 날짜 표현을 파싱합니다.
수정된 명령어
|
|
| 시간대 | ||
%H
%
N
H
%OH
|
24시간 기준 시간을 10진수로 파싱합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정 명령어
|
|
%I
%
N
I
%OI
|
12시간제 시간을 10진수로 파싱합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정 명령어
|
|
%M
%
N
M
%OM
|
분을 10진수로 파싱합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 선행 0이 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
%S
%
N
S
%OS
|
초를 10진수로 파싱합니다. 너비
N
은 읽을 최대 문자 수를 지정합니다. 기본 너비는 2입니다. 앞에 오는 0은 허용되지만 필수는 아닙니다.
수정된 명령어
|
|
%p
|
12시간제 시계와 관련된 AM/PM 표기를 해당 로캘에 맞는 표현으로 파싱합니다. | |
%R
|
"%H:%M"
에 해당합니다.
|
|
%T
|
"%H:%M:%S"
와 동일합니다.
|
|
%r
|
해당 로캘의 12시간제 시각을 파싱합니다. | |
%X
%EX
|
로케일의 시간 표현을 파싱합니다.
수정된 명령어
|
|
| 기타 | ||
%c
%Ec
|
로케일의 날짜 및 시간 표현을 파싱합니다.
수정된 명령어
|
|
%z
%Ez
%Oz
|
UTC에서의 오프셋을
[+|-]hh[mm]
형식으로 파싱합니다. 예를 들어
-0430
은 UTC보다 4시간 30분 뒤를 나타내고
04
는 UTC보다 4시간 앞을 나타냅니다.
수정된 명령어
|
|
%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
을 파싱합니다
(함수 템플릿) |
|
|
(C++20)
|
제공된 형식에 따라 스트림에서
year
을 파싱합니다
(함수 템플릿) |
|
(C++20)
|
제공된 형식에 따라 스트림에서
month
을 파싱합니다
(함수 템플릿) |
|
(C++20)
|
제공된 형식에 따라 스트림에서
day
을 파싱합니다
(함수 템플릿) |
|
(C++20)
|
제공된 형식에 따라 스트림에서
weekday
을 파싱합니다
(함수 템플릿) |
|
(C++20)
|
제공된 형식에 따라 스트림에서
month_day
을 파싱합니다
(함수 템플릿) |
|
(C++20)
|
제공된 형식에 따라 스트림에서
year_month
을 파싱합니다
(함수 템플릿) |
|
(C++20)
|
제공된 형식에 따라 스트림에서
year_month_day
을 파싱합니다
(함수 템플릿) |
|
(C++11)
|
지정된 형식의 날짜/시간 값을 파싱합니다
(함수 템플릿) |