std:: formatter <std::chrono::duration>
|
헤더에 정의됨
<chrono>
|
||
|
template
<
class
Rep,
class
Period,
class
CharT
>
struct formatter < std:: chrono :: duration < Rep, Period > , CharT > ; |
||
std::formatter
의 특수화로,
std::chrono::duration
에 대한 서식 규칙을 정의합니다.
duration
은 자정부터의 시간으로 해석됩니다.
std::formatter 특수화는 일반적으로 직접 접근되지 않고, formatting functions 를 통해 사용됩니다.
형식 지정
형식 지정은 다음과 같은 형태를 가집니다
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
|
수평 탭 문자를 씁니다. | |
| 시간대 | ||
%H
%OH
|
시간(24시간제)을 10진수로 씁니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정 명령
|
|
%I
%OI
|
시간(12시간제)을 10진수로 씁니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정 명령
|
|
%M
%OM
|
분을 10진수로 씁니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
수정 명령
|
|
%S
%OS
|
초를 10진수로 씁니다. 초가 10보다 작은 경우 결과에 0을 접두사로 붙입니다.
입력의 정밀도를 초 단위로 정확히 표현할 수 없는 경우, 형식은 고정 형식의 10진 부동 소수점 숫자이며 입력의 정밀도와 일치하는 정밀도(또는 10진수 초로 변환할 때 소수점 이하 18자리 내에서 표현할 수 없는 경우 마이크로초 정밀도)를 가집니다. 소수점 문자는 로케일에 따라 지역화됩니다.
수정 명령
|
|
%p
|
12시간제와 관련된 로케일의 AM/PM 표기를 씁니다. | |
%R
|
"%H:%M"
와 동일합니다.
|
|
%T
|
"%H:%M:%S"
와 동일합니다.
|
|
%r
|
로케일의 12시간제 시간을 씁니다. | |
%X
%EX
|
로케일의 시간 표현을 씁니다.
수정 명령
|
|
| 지속 시간 카운트 | ||
%Q
|
지속 시간의 틱 수, 즉 count() 를 통해 얻은 값을 씁니다. | |
%q
|
operator<<() 에 지정된 대로 지속 시간의 단위 접미사를 씁니다. | |
다음 지정자는 인식되지만, std::format_error 예외를 발생시킵니다:
|
변환
지정자 |
설명 | |
|---|---|---|
| 연도 | ||
%C
%EC
|
연도를 100으로 나눈 값을 내림 나눗셈으로 기록합니다. 결과가 한 자리 십진수인 경우 앞에 0을 붙입니다.
수정 명령
|
|
%y
%Oy
%Ey
|
연도의 마지막 두 자리 십진수를 기록합니다. 결과가 한 자리인 경우 앞에 0을 붙입니다.
수정 명령
수정 명령
|
|
%Y
%EY
|
연도를 십진수로 기록합니다. 결과가 네 자리 미만인 경우 네 자리가 되도록 왼쪽에 0을 채웁니다.
수정 명령
|
|
| 월 | ||
%b
%h
|
로케일의 약식 월 이름을 기록합니다. | |
%B
|
로케일의 전체 월 이름을 기록합니다. | |
%m
%Om
|
월을 십진수로 기록합니다(1월은
01
). 결과가 한 자리인 경우 앞에 0을 붙입니다.
수정 명령
|
|
| 일 | ||
%d
%Od
|
일자를 십진수로 기록합니다. 결과가 한 자리 십진수인 경우 앞에 0을 붙입니다.
수정 명령
|
|
%e
%Oe
|
일자를 십진수로 기록합니다. 결과가 한 자리 십진수인 경우 앞에 공백을 붙입니다.
수정 명령
|
|
| 요일 | ||
%a
|
로케일의 약식 요일 이름을 기록합니다. | |
%A
|
로케일의 전체 요일 이름을 기록합니다. | |
%u
%Ou
|
ISO 요일을 십진수(1-7)로 기록하며, 월요일은
1
입니다.
수정 명령
|
|
%w
%Ow
|
요일을 십진수(0-6)로 기록하며, 일요일은
0
입니다.
수정 명령
|
|
| ISO 8601 주 기반 연도 | ||
|
ISO 8601에서 주는 월요일부터 시작하며, 연도의 첫 번째 주는 다음 요건을 충족해야 합니다:
|
||
%g
|
ISO 8601 주 기반 연도의 마지막 두 자리 십진수를 기록합니다. 결과가 한 자리인 경우 앞에 0을 붙입니다. | |
%G
|
ISO 8601 주 기반 연도를 십진수로 기록합니다. 결과가 네 자리 미만인 경우 네 자리가 되도록 왼쪽에 0을 채웁니다. | |
%V
%OV
|
ISO 8601 연중 주를 십진수로 기록합니다. 결과가 한 자리인 경우 앞에 0을 붙입니다.
수정 명령
|
|
| 연중 주/일 | ||
%j
|
연중 일자를 십진수로 기록합니다(1월 1일은
001
). 결과가 세 자리 미만인 경우 세 자리가 되도록 왼쪽에 0을 채웁니다.
|
|
%U
%OU
|
연중 주 번호를 십진수로 기록합니다. 연중 첫 번째 일요일이 01주의 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주에 속합니다. 결과가 한 자리인 경우 앞에 0을 붙입니다.
수정 명령
|
|
%W
%OW
|
연중 주 번호를 십진수로 기록합니다. 연중 첫 번째 월요일이 01주의 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주에 속합니다. 결과가 한 자리인 경우 앞에 0을 붙입니다.
수정 명령
|
|
| 날짜 | ||
%D
|
"%m/%d/%y"
와 동일합니다.
|
|
%F
|
"%Y-%m-%d"
와 동일합니다.
|
|
%x
%Ex
|
로케일의 날짜 표현을 기록합니다.
수정 명령
|
|
| 시간대 | ||
%z
%Ez
%Oz
|
UTC에서의 오프셋을 ISO 8601 형식으로 기록합니다. 예를 들어
-0430
은 UTC보다 4시간 30분 뒤를 의미합니다. 오프셋이 0인 경우
+0000
을 사용합니다.
수정 명령
|
|
%Z
|
시간대 약어를 기록합니다. | |
| 기타 | ||
%c
%Ec
|
로케일의 날짜 및 시간 표현을 기록합니다.
수정 명령
|
|
예제
#include <chrono> #include <print> using namespace std::chrono_literals; int main() { auto du{3h + 2min + 1s}; std::print( "Duration is:\n" "{}\n" "{:%T}\n" "{:%H:%M:%S}\n" "{:%H hours %M minutes %S seconds}\n", du, du, du, du); }
가능한 출력:
Duration is: 10921s 03:02:01 03:02:01 03 hours 02 minutes 01 seconds
참고 항목
|
(C++20)
|
인수의 형식화된 표현을 새 문자열에 저장합니다
(함수 템플릿) |