std:: formatter <std::chrono::zoned_time> , std:: chrono:: local_time_format
|
헤더에 정의됨
<chrono>
|
||
|
template
<
class
Duration,
class
TimeZonePtr,
class
CharT
>
struct
formatter
<
std::
chrono
::
zoned_time
<
Duration, TimeZonePtr
>
, CharT
>
|
(1) | (C++20 이후) |
|
template
<
class
Duration
>
/*local-time-format-t*/
<
Duration
>
|
(2) | (C++20 이후) |
|
도우미 템플릿
|
||
|
template
<
class
Duration
>
struct
/*local-time-format-t*/
|
(3) |
(C++20 이후)
( 설명 전용* ) |
|
template
<
class
Duration,
class
CharT
>
struct formatter < /*local-time-format-t*/ < Duration > , CharT > ; |
(4) | (C++20 이후) |
-
parse멤버 함수는 기본 클래스로부터 상속됩니다. -
서식 인자를
tp
로, 서식 컨텍스트를
ctx
로 가정할 때,
format멤버 함수의 동작은 다음과 동일합니다:
using
common_duration_type
=
std::
common_type_t
<
Duration,
std::
chrono
::
seconds
>
;
using
formatter_type
=
std::
formatter
<
local-time-format-t
<
common_duration_type
>
;
std::
chrono
::
sys_info
info
=
tp.
get_info
(
)
;
return
formatter_type
::
format
(
{
tp.
get_local_time
(
)
,
&
info.
abbrev
,
&
info.
offset_sec
}
)
, ctx
)
;
-
abbrev는 시간대 약어를 포함합니다. -
offset_sec는 UTC 기준 오프셋을 포함합니다. -
time는 필요한 다른 모든 정보를 포함합니다.
-
chrono-spec
이 생략된 경우, 결과는
chrono-spec
으로
%F %T %Z를 사용한 것과 동일합니다. -
%Z가 사용된 경우, f. abbrev 이 null 포인터 값이 아니면 * f. abbrev 로 대체됩니다; 그렇지 않으면 std::format_error 타입의 예외가 발생합니다. -
%z또는 수정된%z변형이 사용된 경우, f. offset_sec 이 null 포인터 값이 아니면 * f. offset_sec 로 대체됩니다; 그렇지 않으면 std::format_error 타입의 예외가 발생합니다.
std::formatter 특수화는 일반적으로 직접 접근되지 않고, 서식 지정 함수 를 통해 사용됩니다.
목차 |
형식 지정
형식 지정은 다음과 같은 형태를 가집니다
fill-and-align
(선택 사항)
width
(선택 사항)
precision
(선택 사항)
L
(선택 사항)
chrono-spec
(선택 사항)
|
|||||||||
fill-and-align
,
width
, 그리고
precision
은
표준 형식 지정
에서와 동일한 의미를 가집니다.
precision
은 표현 타입
Rep
가 부동소수점 타입인
std::chrono::duration
타입에 대해서만 유효하며, 그렇지 않으면
std::format_error
가 발생합니다.
서식 지정에 사용되는 로케일은 다음과 같이 결정됩니다:
-
형식 지정자에
L이 존재하지 않으면 기본 "C" 로케일을 사용하며, - 그렇지 않고 서식 지정 함수에 전달된 std::locale 이 있으면 해당 로케일을 사용하며,
-
그 외의 경우 (
L이 존재하지만 서식 지정 함수에 std::locale 이 전달되지 않음) 전역 로케일을 사용합니다.
만약 (일반 또는 와이드) 문자열 리터럴 인코딩 이 유니코드 인코딩 형식이고 로케일이 구현에서 정의된 로케일 집합 중 하나인 경우, 로케일에 의존하는 각 대체는 대체 문자 시퀀스가 리터럴 인코딩으로 변환된 것처럼 수행됩니다.
chrono-spec
는 하나 이상의 변환 지정자와 일반 문자(
{
,
}
,
%
제외)로 구성됩니다.
chrono-spec
는 반드시 변환 지정자로 시작해야 합니다. 모든 일반 문자는 수정 없이 출력에 기록됩니다. 각 수정되지 않은 변환 지정자는
%
문자로 시작하며, 그 뒤에 지정자의 동작을 결정하는 문자가 옵니다. 일부 변환 지정자는 수정된 형태를 가지며,
E
또는
O
수정 문자가
%
문자 뒤에 삽입됩니다. 각 변환 지정자는 아래에 설명된 대로 출력에서 적절한 문자로 대체됩니다.
달리 명시되지 않는 한,
chrono-spec
이 비어 있는 경우, chrono 객체는 다음과 같이 서식 지정 로케일(
std::
locale
::
classic
(
)
, 전달된
std::locale
객체, 그리고
std::
locale
::
global
(
)
) 중 하나로
설정된
os
타입의 객체
std::
basic_ostringstream
<
CharT
>
에
스트리밍
하는 것처럼 서식 지정되며,
os.
str
(
)
을 출력 버퍼에 복사하고 형식 지정자에 따른 추가 패딩과 조정이 적용됩니다.
다음 형식 지정자를 사용할 수 있습니다:
|
변환
지정자 |
설명 | |
|---|---|---|
%%
|
리터럴
%
문자를 출력합니다.
|
|
%n
|
새 줄 문자를 기록합니다. | |
%t
|
수평 탭 문자를 씁니다. | |
| 연도 | ||
%C
%EC
|
100으로 나눈 연도를 내림 나눗셈으로 기록합니다. 결과가 한 자리 십진수인 경우 0을 접두사로 붙입니다.
수정된 명령어
|
|
%y
%Oy
%Ey
|
연도의 마지막 두 자리 십진수를 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정 명령
수정 명령
|
|
%Y
%EY
|
연도를 10진수로 기록합니다. 결과가 네 자리 미만일 경우 0으로 왼쪽 채움되어 네 자리가 됩니다.
수정된 명령어
|
|
| 월 | ||
%b
%h
|
로케일의 약식 월 이름을 작성합니다. | |
%B
|
로케일의 전체 월 이름을 기록합니다. | |
%m
%Om
|
월을 10진수 숫자로 기록합니다(1월은
01
). 결과가 한 자리 숫자인 경우 0을 앞에 붙입니다.
수정 명령어
|
|
| 일자 | ||
%d
%Od
|
날짜의 일(day)을 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 앞에 붙입니다.
수정 명령어
|
|
%e
%Oe
|
일(day)을 십진수로 출력합니다. 결과가 한 자리 십진수인 경우 앞에 공백이 추가됩니다.
수정 명령어
|
|
| 요일 | ||
%a
|
로케일의 약식 요일 이름을 기록합니다. | |
%A
|
로케일의 전체 요일 이름을 기록합니다. | |
%u
%Ou
|
ISO 평일을 10진수(1-7)로 기록하며, 여기서 월요일은
1
입니다.
수정된 명령어
|
|
%w
%Ow
|
요일을 10진수(0-6)로 기록하며, 여기서 일요일은
0
입니다.
수정된 명령어
|
|
| ISO 8601 주 기반 연도 | ||
|
ISO 8601 표준에 따르면 주(week)는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:
|
||
%g
|
ISO 8601 주 기반 연도의 마지막 두 자리 숫자를 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다. | |
%G
|
ISO 8601 주 기반 연도를 10진수로 기록합니다. 결과가 네 자리 미만인 경우 0으로 왼쪽 채워 네 자리로 만듭니다. | |
%V
%OV
|
ISO 8601 주차를 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정된 명령어
|
|
| 연중 주/일 | ||
%j
|
연중 일자를 십진수로 기록합니다(1월 1일은
001
). 결과가 세 자리 미만인 경우 0으로 왼쪽 채움되어 세 자리가 됩니다.
|
|
%U
%OU
|
연중 주 번호를 10진수로 기록합니다. 해당 연도의 첫 번째 일요일이 01주차의 첫 번째 날입니다. 그 이전의 같은 해의 날들은 00주차에 속합니다. 결과가 한 자리 숫자인 경우 0을 앞에 붙입니다.
수정된 명령어
|
|
%W
%OW
|
연중 주 번호를 10진수로 기록합니다. 연중 첫 번째 월요일이 01주차의 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주차에 속합니다. 결과가 한 자리 숫자인 경우 앞에 0이 붙습니다.
수정된 명령어
|
|
| 날짜 | ||
%D
|
"%m/%d/%y"
와 동일합니다.
|
|
%F
|
"%Y-%m-%d"
와 동일합니다.
|
|
%x
%Ex
|
로케일의 날짜 표현을 기록합니다.
수정된 명령어
|
|
| 시간대 | ||
%H
%OH
|
24시간 기준으로 시간을 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정 명령어
|
|
%I
%OI
|
12시간제 시간을 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정된 명령어
|
|
%M
%OM
|
분을 십진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정된 명령어
|
|
%S
%OS
|
초를 10진수로 기록합니다. 초 수가 10보다 작은 경우, 결과 앞에 0이 붙습니다.
입력의 정밀도를 초 단위로 정확히 표현할 수 없는 경우, 고정 형식의 10진 부동 소수점 숫자로 표시하며, 입력의 정밀도와 일치하는 소수점 이하 자릿수를 사용합니다(18자리 이하의 소수부로 10진수 초 변환이 불가능한 경우 마이크로초 정밀도까지 표시). 소수점 문자는 로케일에 따라 지역화됩니다.
수정 명령어
|
|
%p
|
12시간제 시계와 관련된 AM/PM 표기를 지역별 표현으로 출력합니다. | |
%R
|
"%H:%M"
에 해당합니다.
|
|
%T
|
"%H:%M:%S"
에 해당합니다.
|
|
%r
|
해당 지역의 12시간제 시각을 기록합니다. | |
%X
%EX
|
로케일의 시간 표현을 기록합니다.
수정된 명령어
|
|
| 시간대 | ||
%z
%Ez
%Oz
|
UTC 기준 시차를 ISO 8601 형식으로 기록합니다. 예를 들어
-0430
은 UTC보다 4시간 30분 뒤처짐을 나타냅니다. 시차가 0인 경우
+0000
이 사용됩니다.
수정된 명령어
|
|
%Z
|
시간대 약어를 기록합니다. | |
| 기타 | ||
%c
%Ec
|
로케일의 날짜 및 시간 표현을 기록합니다.
수정된 명령어
|
|
다음 지정자는 인식되지만 std::format_error 예외를 발생시킵니다:
|
변환
지시자 |
설명 | |
|---|---|---|
| 지속 시간 카운트 | ||
%Q
|
지속 시간의 틱 카운트를 기록합니다. 즉, count() 를 통해 얻은 값입니다. | |
%q
|
지속 시간의 단위 접미사를 기록합니다. operator<<() 에 지정된 대로입니다. | |
예제
|
이 섹션은 불완전합니다
이유: 예제 없음 |
결함 보고서
다음 동작 변경 결함 보고서는 이전에 게시된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 4124 | C++20 |
1.
chrono-spec
생략 불가능
2.
zoned_time
포맷팅 불가능
초보다 coarse한 해상도로 |
1. 생략 가능
2. 해당 해상도로 포맷팅 가능 |
| P2372R3 | C++20 |
formatter
전역 로케일 또는 전달된 로케일 사용
|
기본
"C"
로케일이 사용됨
L
이 없는 경우
|
참고 항목
|
(C++20)
|
인수의 형식화된 표현을 새 문자열에 저장합니다
(함수 템플릿) |