Namespaces
Variants

std:: formatter <std::chrono::tai_time>

From cppreference.net

헤더 파일에 정의됨 <chrono>
template < class Duration, class CharT >
struct formatter < std:: chrono :: tai_time < Duration > , CharT > ;
(C++20부터)

std::formatter 의 특수화로, std::chrono::tai_time 에 대한 서식 규칙을 정의합니다.

  • 만약 %Z 가 사용되면, 이는 "TAI" CharT 로 확장된 값으로 대체됩니다.
  • 만약 %z 또는 수정된 변형이 사용되면, 0min 의 오프셋이 포맷팅됩니다.
  • 포맷팅된 날짜와 시간은 std:: chrono :: sys_time < Duration > ( tp. time_since_epoch ( ) ) - std:: chrono :: days ( 4383 ) 로 초기화된 std::chrono::sys_time 에 대해 포맷팅된 것과 동일합니다.

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" locale,
  • 그렇지 않고 서식 지정 함수에 전달된 std::locale 이 있으면 해당 locale,
  • 그렇지 않으면 ( L 이 존재하지만 서식 지정 함수에 std::locale 이 전달되지 않은 경우) 전역 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을 접두사로 붙입니다.

수정된 명령어 %EC 는 해당 로캘의 세기 표현 대체 형식을 기록합니다.

%y
%Oy
%Ey
연도의 마지막 두 자리 십진수를 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.

수정 명령 %Oy 는 로케일의 대체 표현을 기록합니다.

수정 명령 %Ey %EC (연도만 해당)로부터의 오프셋에 대한 로케일의 대체 표현을 기록합니다.

%Y
%EY
연도를 10진수로 기록합니다. 결과가 네 자리 미만일 경우 0으로 왼쪽 채움되어 네 자리가 됩니다.

수정된 명령어 %EY 는 로케일의 대체 전체 연도 표현을 기록합니다.

%b
%h
로케일의 약식 월 이름을 작성합니다.
%B 로케일의 전체 월 이름을 기록합니다.
%m
%Om
월을 10진수 숫자로 기록합니다(1월은 01 ). 결과가 한 자리 숫자인 경우 0을 앞에 붙입니다.

수정 명령어 %Om 은 로캘의 대체 표현을 기록합니다.

일자
%d
%Od
날짜의 일(day)을 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 앞에 붙입니다.

수정 명령어 %Od 는 로케일의 대체 표현을 기록합니다.

%e
%Oe
일(day)을 십진수로 출력합니다. 결과가 한 자리 십진수인 경우 앞에 공백이 추가됩니다.

수정 명령어 %Oe 는 로케일의 대체 표현을 출력합니다.

요일
%a 로케일의 약식 요일 이름을 기록합니다.
%A 로케일의 전체 요일 이름을 기록합니다.
%u
%Ou
ISO 평일을 10진수(1-7)로 기록하며, 여기서 월요일은 1 입니다.

수정된 명령어 %Ou 는 로캘의 대체 표현을 기록합니다.

%w
%Ow
요일을 10진수(0-6)로 기록하며, 여기서 일요일은 0 입니다.

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

ISO 8601 주 기반 연도

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

  • 1월 4일을 포함해야 함
  • 해당 연도의 첫 번째 목요일을 포함해야 함
%g ISO 8601 주 기반 연도의 마지막 두 자리 숫자를 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.
%G ISO 8601 주 기반 연도를 10진수로 기록합니다. 결과가 네 자리 미만인 경우 0으로 왼쪽 채워 네 자리로 만듭니다.
%V
%OV
ISO 8601 주 번호를 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.

수정된 명령어 %OV 는 로캘의 대체 표현을 기록합니다.

연중 주/일
%j 연중 일자를 십진수로 기록합니다(1월 1일은 001 ). 결과가 세 자리 미만인 경우 0으로 왼쪽 채움되어 세 자리가 됩니다.
%U
%OU
연중 주 번호를 10진수로 기록합니다. 해당 연도의 첫 번째 일요일이 01주차의 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주차에 속합니다. 결과가 한 자리 숫자인 경우 앞에 0을 붙입니다.

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

%W
%OW
연중 주 번호를 10진수로 기록합니다. 연중 첫 번째 월요일이 01주차의 첫 번째 날입니다. 그 이전의 같은 해 날짜들은 00주차에 속합니다. 결과가 한 자리 숫자인 경우 0을 앞에 붙입니다.

수정된 명령어 %OW 는 로케일의 대체 표현을 기록합니다.

날짜
%D "%m/%d/%y" 와 동일합니다.
%F "%Y-%m-%d" 와 동일합니다.
%x
%Ex
로케일의 날짜 표현을 기록합니다.

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

시간대
%H
%OH
24시간 기준으로 시간을 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.

수정된 명령어 %OH 는 로케일의 대체 표현을 기록합니다.

%I
%OI
12시간제 시간을 10진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.

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

%M
%OM
분을 십진수로 기록합니다. 결과가 한 자리 숫자인 경우 0을 접두사로 붙입니다.

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

%S
%OS
초를 10진수로 기록합니다. 초 수가 10보다 작은 경우, 결과 앞에 0이 붙습니다.

입력의 정밀도를 초 단위로 정확하게 표현할 수 없는 경우, 고정 형식의 10진 부동 소수점 숫자로 표시하며, 입력의 정밀도와 일치하는 소수점 이하 자릿수를 사용합니다(10진 부동 소수점 초로 변환할 때 소수점 이하 18자리 내에서 표현할 수 없는 경우 마이크로초 정밀도까지 표시). 소수점 문자는 로케일에 따라 지역화됩니다.

수정된 명령어 %OS 는 로케일의 대체 표현을 기록합니다.

%p 12시간제 시계와 관련된 AM/PM 표기를 지역별 표현으로 출력합니다.
%R "%H:%M" 에 해당합니다.
%T "%H:%M:%S" 와 동일합니다.
%r 해당 지역의 12시간제 시각을 기록합니다.
%X
%EX
로케일의 시간 표현을 기록합니다.

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


시간대
%z
%Ez
%Oz
UTC 기준 시간대 오프셋을 ISO 8601 형식으로 기록합니다. 예를 들어 -0430 은 UTC보다 4시간 30분 뒤처짐을 나타냅니다. 오프셋이 0인 경우 +0000 이 사용됩니다.

수정된 명령어 %Ez %Oz 는 시와 분 사이에 : 를 삽입합니다 (예: -04:30 ).

%Z 시간대 약어를 기록합니다.
기타
%c
%Ec
로케일의 날짜 및 시간 표현을 기록합니다.

수정된 명령어 %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)
인수의 서식화된 표현을 새 문자열에 저장합니다
(함수 템플릿)