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またはその修正バリアントが使用された場合、 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 が渡されていない場合)、グローバルロケール。
もし (通常またはワイド) 文字列リテラルエンコーディング がUnicodeエンコーディング形式であり、かつロケールが実装定義のロケールセットに含まれる場合、ロケールに依存する各置換は、置換文字シーケンスがリテラルエンコーディングに変換されたかのように実行されます。
chrono-spec
は1つ以上の変換指定子と通常文字(
{
、
}
、および
%
以外)で構成されます。
chrono-spec
は変換指定子で始まる必要があります。すべての通常文字は変更なしで出力に書き込まれます。各変換指定子は
%
文字で始まり、その後に指定子の動作を決定する文字が続きます。一部の変換指定子には、
%
文字の後に
E
または
O
修飾文字が挿入される修正形式があります。各変換指定子は、以下に説明するように出力で適切な文字に置き換えられます。
特に指定がない限り、
chrono-spec
が空の場合、chronoオブジェクトは
ストリーミング
によってフォーマットされたかのように、型
std::
basic_ostringstream
<
CharT
>
のオブジェクト
os
に、フォーマットロケール(
std::
locale
::
classic
(
)
、渡された
std::locale
オブジェクト、および
std::
locale
::
global
(
)
)のいずれかで
設定された
状態で書き込み、
os.
str
(
)
を出力バッファにコピーし、フォーマット指定子に従った追加のパディングと調整を行います。
以下のフォーマット指定子が利用可能です:
|
変換指定子
|
説明 | |
|---|---|---|
%%
|
リテラルの
%
文字を書き込みます。
|
|
%n
|
改行文字を書き込みます。 | |
%t
|
水平タブ文字を書き込みます。 | |
| 年 | ||
%C
%EC
|
床除算を使用して100で割った年を書き込みます。結果が1桁の10進数の場合、0が前置されます。
修正コマンド
|
|
%y
%Oy
%Ey
|
年の下2桁の10進数を書き出します。結果が1桁の場合は0が前置されます。
修正コマンド
修正コマンド
|
|
%Y
%EY
|
年を10進数で書き込みます。結果が4桁未満の場合、0で左詰めされて4桁になります。
修正コマンド
|
|
| 月 | ||
%b
%h
|
ロケールの省略された月名を書き出します。 | |
%B
|
ロケールの完全な月名を書き込みます。 | |
%m
%Om
|
月を10進数で書き込みます(1月は
01
となります)。結果が1桁の場合は、0が前置されます。
修正コマンド
|
|
| 日 | ||
%d
%Od
|
日を10進数で書き込みます。結果が1桁の10進数の場合、0が前置されます。
修正コマンド
|
|
%e
%Oe
|
日付を10進数で出力します。結果が1桁の場合は、スペースが前に付加されます。
修飾コマンド
|
|
| 曜日 | ||
%a
|
ロケールの省略された曜日名を書き出します。 | |
%A
|
ロケールの完全な曜日名を書き込みます。 | |
%u
%Ou
|
ISO 週番号を10進数で出力します(1-7)。月曜日は
1
となります。
修飾コマンド
|
|
%w
%Ow
|
曜日を10進数(0-6)で出力します。日曜日は
0
となります。
修正コマンド
|
|
| ISO 8601 週ベースの年 | ||
|
ISO 8601では週は月曜日から始まり、年の最初の週は以下の要件を満たさなければなりません:
|
||
%g
|
ISO 8601週ベース年の下2桁を出力します。結果が1桁の場合は0が前置されます。 | |
%G
|
ISO 8601 週ベースの年を10進数で書き込みます。結果が4桁未満の場合、4桁になるまで0で左側が埋められます。 | |
%V
%OV
|
年におけるISO 8601週を10進数で書き込みます。結果が1桁の場合、0が前置されます。
修正コマンド
|
|
| 年間の週/日 | ||
%j
|
年間の日を10進数で出力します(1月1日は
001
となります)。結果が3桁未満の場合、0で左詰めされて3桁になります。
|
|
%U
%OU
|
年における週番号を10進数で書き出します。年の最初の日曜日が週01の最初の日となります。それ以前の同じ年の日付は週00となります。結果が1桁の場合、0が前置されます。
修正コマンド
|
|
%W
%OW
|
年における週番号を10進数で書き込みます。年の最初の月曜日が週01の最初の日となります。それ以前の同じ年の日付は週00となります。結果が1桁の場合、0が前置されます。
修正コマンド
|
|
| 日付 | ||
%D
|
"%m/%d/%y"
と同等です。
|
|
%F
|
"%Y-%m-%d"
と同等です。
|
|
%x
%Ex
|
ロケールの日付表現を書き出します。
修正コマンド
|
|
| 時刻 | ||
%H
%OH
|
24時間制の時間を10進数で書き出します。結果が1桁の場合、0が前置されます。
修正コマンド
|
|
%I
%OI
|
12時間制で時間を10進数で書き込みます。結果が1桁の場合、0が前置されます。
修正コマンド
|
|
%M
%OM
|
分を10進数で書き込みます。結果が1桁の場合、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分遅れていることを示します。オフセットがゼロの場合、
+0000
が使用されます。
修正コマンド |
|
%Z
|
タイムゾーンの略称を出力します。 | |
| その他 | ||
%c
%Ec
|
ロケールの日時表現を書き出します。
修正コマンド
|
|
以下の指定子は認識されますが、 std::format_error がスローされる原因となります:
|
変換指定子
|
説明 | |
|---|---|---|
| 期間のカウント | ||
%Q
|
期間のティックカウントを出力します。すなわち、 count() を通じて取得される値です。 | |
%q
|
期間の単位サフィックスを出力します。 operator<<() で指定される通りです。 | |
例
|
このセクションは不完全です
理由: 例がありません |
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 4124 | C++20 |
1.
chrono-spec
を省略できなかった
2.
zoned_time
を秒より粗い解像度で
フォーマットできなかった |
1. 省略可能
2. これらの解像度で フォーマット可能 |
| P2372R3 | C++20 |
formatter
はグローバルロケールまたは渡されたロケールを使用した
|
デフォルトの
"C"
ロケールが
L
が存在しない場合に使用される
|
関連項目
|
(C++20)
|
引数のフォーマットされた表現を新しい文字列に格納する
(関数テンプレート) |