名前空間
変種
操作

std::formatter<std::chrono::month_weekday>

From cppreference.com
 
 
 
 
ヘッダー <chrono> で定義
template< class CharT >
struct formatter<std::chrono::month_weekday, CharT>;
(C++20以降)

std::formatterの特殊化で、std::chrono::month_weekdayのフォーマット規則を定義します。

std::formatter の特殊化は、通常直接アクセスされることはなく、フォーマット関数を通じて使用されます。

目次

[編集] フォーマット仕様

フォーマット指定子は次の形式をとります。

fill-and-align (optional) width (optional) precision (optional) L(optional) chrono-spec (optional)

fill-and-alignwidthprecision は、標準フォーマット指定子と同じ意味を持ちます。precision は、表現型 Rep が浮動小数点型である std::chrono::duration 型でのみ有効です。それ以外の場合は、std::format_error がスローされます。

フォーマットに使用されるロケールは次のように決定されます。

  • フォーマット指定子に L が存在しない場合は、デフォルトの "C" ロケール。
  • それ以外の場合は、フォーマット関数に渡された std::locale オブジェクトで示されるロケール(存在する場合)。
  • それ以外の場合(L が存在し、フォーマット関数に std::locale が渡されなかった場合)、グローバルロケール。

(通常のまたはワイドな)文字列リテラルのエンコーディングが Unicode エンコーディング形式であり、ロケールが実装定義されたロケールのセットに含まれている場合、ロケールに依存する各置換は、置換文字シーケンスがリテラルエンコーディングに変換されたかのように実行されます。

chrono-spec は、1つ以上の変換指定子と、通常の文字({}% 以外)で構成されます。chrono-spec は変換指定子で始まる必要があります。すべての通常の文字は変更なしに出力に書き込まれます。変更されない各変換指定子は、% 文字とその後の指定子の動作を決定する文字で始まります。一部の変換指定子には、% 文字の後に E または O 修飾子文字が挿入された変更形式があります。各変換指定子は、以下に説明するように、出力で適切な文字に置き換えられます。

特に指定がない限り、chrono-specが空の場合、chronoオブジェクトは、フォーマットロケール(std::locale::classic()、渡されたstd::localeオブジェクト、およびstd::locale::global()のいずれか)でimbueされたstd::basic_ostringstream<CharT>型のオブジェクトosへのストリーミングと同様にフォーマットされ、フォーマット指定子に従って追加のパディングと調整が行われた後、os.str()の内容が出力バッファにコピーされます。

以下のフォーマット指定子が利用可能です

変換
指定子
説明
%% リテラルの % 文字を書き込みます。
%n 改行文字を書き込みます。
%t 水平タブ文字を書き込みます。
%b
%h
ロケールでの省略された月名を書き込みます。
%B ロケールでの完全な月名を書き込みます。
%m
%Om
月を 10 進数で書き込みます(1 月は 01)。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %Om は、ロケールでの代替表現を書き込みます。

曜日
%a ロケールでの省略された曜名を書き込みます。
%A ロケールでの完全な曜名を書き込みます。
%u
%Ou
ISO 曜数を 10 進数(1-7)で書き込みます。月曜日が 1 です。

修飾コマンド %Ou は、ロケールでの代替表現を書き込みます。

%w
%Ow
曜数を 10 進数(0-6)で書き込みます。日曜日が 0 です。

修飾コマンド %Ow は、ロケールでの代替表現を書き込みます。

次の指定子は認識されますが、std::format_error がスローされます。

変換
指定子
説明
%C
%EC
切り捨て除算を使用して、年を 100 で割った値を書き込みます。結果が 1 桁の 10 進数である場合、先頭に 0 が付きます。

修飾コマンド %EC は、世紀のロケールでの代替表現を書き込みます。

%y
%Oy
%Ey
年の下 2 桁を 10 進数で書き込みます。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %Oy は、ロケールでの代替表現を書き込みます。

修飾コマンド %Ey は、%EC(年のみ)からのオフセットのロケールでの代替表現を書き込みます。

%Y
%EY
年を 10 進数で書き込みます。結果が 4 桁未満の場合、先頭に 0 を付けて 4 桁になります。

修飾コマンド %EY は、ロケールでの完全な年の代替表現を書き込みます。

%d
%Od
月の日を 10 進数で書き込みます。結果が 1 桁の 10 進数である場合、先頭に 0 が付きます。

修飾コマンド %Od は、ロケールの代替表現を書き込みます。

%e
%Oe
月の日を 10 進数で書き込みます。結果が 1 桁の 10 進数である場合、先頭にスペースが付きます。

修飾コマンド %Oe は、ロケールの代替表現を書き込みます。

ISO 8601週番号ベースの年

ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。

  • 1月4日を含む
  • その年の最初の木曜日を含む
%g ISO 8601 週番号の年の下 2 桁を 10 進数で書き込みます。結果が 1 桁の場合、先頭に 0 が付きます。
%G ISO 8601 週番号の年を 10 進数で書き込みます。結果が 4 桁未満の場合、先頭に 0 を付けて 4 桁になります。
%V
%OV
ISO 8601 週番号を 10 進数で書き込みます。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %OV は、ロケールでの代替表現を書き込みます。

週/年の日
%j 年の日を 10 進数で書き込みます(1 月 1 日は 001)。結果が 3 桁未満の場合、先頭に 0 を付けて 3 桁になります。
%U
%OU
週番号を 10 進数で書き込みます。その年の最初の日曜日は週 01 の最初の日です。それより前の同じ年の日は週 00 に含まれます。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %OU は、ロケールでの代替表現を書き込みます。

%W
%OW
週番号を 10 進数で書き込みます。その年の最初(月曜日)は週 01 の最初の日です。それより前の同じ年の日は週 00 に含まれます。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %OW は、ロケールでの代替表現を書き込みます。

日付
%D "%m/%d/%y" と同等です。
%F "%Y-%m-%d" と同等です。
%x
%Ex
ロケールでの日付表現を書き込みます。

修飾コマンド %Ex は、ロケールでの代替日付表現を生成します。

時刻
%H
%OH
時間(24 時間制)を 10 進数で書き込みます。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %OH は、ロケールでの代替表現を書き込みます。

%I
%OI
時間(12 時間制)を 10 進数で書き込みます。結果が 1 桁の場合、先頭に 0 が付きます。

修飾コマンド %OI は、ロケールでの代替表現を書き込みます。

%M
%OM
分を 10 進数で書き込みます。結果が 1 桁の場合、先頭に 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 は、ロケールでの代替時刻表現を書き込みます。

期間のカウント
%Q 期間のティック数を書き込みます。つまり、count() を通じて取得される値です。
%q 期間の単位接尾辞を書き込みます。operator<<() で指定されたとおりです。
タイムゾーン
%z
%Ez
%Oz
ISO 8601 形式の UTC からのオフセットを書き込みます。例: -0430 は UTC より 4 時間 30 分遅れていることを示します。オフセットがゼロの場合は +0000 が使用されます。

修飾コマンド %Ez および %Oz は、時間と分の間に : を挿入します(例: -04:30)。

%Z タイムゾーンの省略名を書き込みます。
その他
%c
%Ec
ロケールでの日付と時刻の表現を書き込みます。

修飾コマンド %Ec は、ロケールでの代替日付と時刻の表現を書き込みます。

[編集]

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
P2372R3 C++20 formatter はグローバルロケールまたは渡されたロケールを使用します。 L がない場合、デフォルトの "C" ロケールが使用されます。

[編集] 関連項目

(C++20)
引数のフォーマット済み表現を新しい文字列に格納する
(関数テンプレート) [編集]
English 日本語 中文(简体) 中文(繁體)