std:: formatter <std::chrono::utc_time>
|
헤더에 정의됨
<chrono>
|
||
|
template
<
class
Duration,
class
CharT
>
struct formatter < std:: chrono :: utc_time < Duration > , CharT > ; |
(C++20부터) | |
std::formatter 의 특수화로, std::chrono::utc_time 에 대한 서식 규칙을 정의합니다.
-
만약
%Z가 사용되면, 이는 "UTC" 가CharT로 확장된 값으로 대체됩니다. -
만약
%z또는 수정된 변형이 사용되면,0min의 오프셋이 포맷됩니다. -
인수가 윤초 삽입 중인 시간을 나타내고 초 필드가 포맷되는 경우, 해당 필드의 정수 부분은
"60"
가
CharT로 확장된 값입니다.
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
(
)
) 중 하나)로
임뷰드
된
std::
basic_ostringstream
<
CharT
>
타입의 객체
os
에
스트리밍
하는 것처럼 서식 지정되며,
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진 부동 소수점 숫자로 표시하며, 입력의 정밀도와 일치하는 정밀도를 사용합니다(10진수 부동 소수점 초로 변환할 때 소수점 이하 18자리 내에서 표현할 수 없는 경우 마이크로초 정밀도로 표시). 소수점 문자는 로케일에 따라 지역화됩니다.
수정된 명령어
|
|
%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<<() 에 지정된 대로입니다. | |
예제
#include <chrono> #include <format> #include <iostream> int main() { std::chrono::time_point<std::chrono::utc_clock> epoch; std::cout << std::format("The time of the Unix epoch was {0:%F}T{0:%R%z}.", epoch) << '\n'; }
출력:
The time of the Unix epoch was 1970-01-01T00:00+0000.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| P2372R3 | C++20 |
formatter
가 전역 로케일이나 전달된 로케일을 사용함
|
L
이 없을 때 기본
"C"
로케일이 사용됨
|
참고 항목
|
(C++20)
|
인수의 형식화된 표현을 새로운 문자열에 저장합니다
(함수 템플릿) |