@@ -44,8 +44,8 @@ chronoライブラリではこれに加え、たとえばデフォルトでは
4444| `%A` | ロケール依存の曜日の完全名。<br/> 値に有効な曜日が含まれていない場合、[`std::format_error`](/reference/format/format_error.md)例外を送出する | `"Friday"`, `"金曜日"` |
4545| `%b` | ロケール依存の月の略称。<br/> 値に有効な月が含まれていない場合、[`std::format_error`](/reference/format/format_error.md)例外を送出する | `"Apr"`, `"4月"` |
4646| `%B` | ロケール依存の月の完全名。<br/> 値に有効な月が含まれていない場合、[`std::format_error`](/reference/format/format_error.md)例外を送出する | `"April"`, `"4月"` |
47- | `%c` | ロケール依存の日付・時間の表現。改良コマンド`%Ec`を指定すると、異なる表現を出力する | `"Fri Apr 24 17:14:44 2020"`<br/> `"2020年04月24日 17時14分44秒"`<br/> `%Ec`では`"令和02年04月24日 17時14分44秒"` |
48- | `%C` | 100で切り下げ除算した年 (世紀)。結果が10進数で1桁の場合、先頭に`0`がつく。改良コマンド`%EC`を指定すると、ロケール依存の世紀の異なる表現を出力する | `"21"`<br/> `%EC`では`"令和"` (元号 ) |
47+ | `%c` | ロケール依存の日付・時間の表現。改良コマンド`%Ec`を指定すると、異なる表現を出力する | `"Fri Apr 24 17:14:44 2020"`<br/> `"2020年04月24日 17時14分44秒"` |
48+ | `%C` | 100で切り下げ除算した年 (世紀)。結果が10進数で1桁の場合、先頭に`0`がつく。改良コマンド`%EC`を指定すると、ロケール依存の世紀の異なる表現を出力する | 2020年では`"20"` ) |
4949| `%d` | 10進数での月の日。結果が10進数で1桁の場合、先頭に`0`がつく。改良コマンド`%Od`を指定すると、ロケール依存の異なる表現を出力する | `"24"` |
5050| `%D` | `%m/%d/%y`と等価 | `"04/24/20"` |
5151| `%e` | 10進数での月の日。結果が10進数で1桁の場合、先頭にスペースがつく。改良コマンド`%Oe`を指定すると、ロケール依存の異なる表現を出力する | `" 1"` |
@@ -72,41 +72,69 @@ chronoライブラリではこれに加え、たとえばデフォルトでは
7272| `%V` | 10進数でのISO週ベースの週番号。結果が1桁の場合、先頭に`0`がつく。改良コマンド`%OV`を指定すると、ロケール依存の異なる表現を出力する | `"17"` |
7373| `%w` | 10進数での日曜を0とする曜日番号 (0-6)。改良コマンド`%Ow`を指定すると、ロケール依存の異なる表現を出力する | `"5"` |
7474| `%W` | 10進数での年の週番号。年の最初の月曜日が最初の曜日であるとして`01`、同年のそれより前の日は`00`となる。結果が1桁の場合、先頭に`0`がつく。改良コマンド`%OW`を指定すると、ロケール依存の異なる表現を出力する | `"16"` |
75- | `%x` | ロケール依存の日付表現。改良コマンド`%Ex`を指定すると、ロケール依存の異なる表現が出力される | `"04/24/20"`<br/> `"2020年04月24日"`<br/> `%Ex`では`"令和02年04月24日"` |
75+ | `%x` | ロケール依存の日付表現。改良コマンド`%Ex`を指定すると、ロケール依存の異なる表現が出力される | `"04/24/20"` |
7676| `%X` | ロケール依存の時間表現。改良コマンド`%EX`を指定すると、ロケール依存の異なる表現が出力される | `"17:14:44"`<br/> `"17時14分44秒"` |
7777| `%y` | 10進数での年のうしろ2桁。結果が1桁の場合、先頭に`0`がつく。改良コマンド`%Oy`を指定すると、ロケール依存の異なる表現を出力する。改良コマンド`%Ey`を指定すると、`%EC`からのオフセットとしてロケール依存の異なる表現を出力する。 | `"20"`<br/> `%Ey`では`"02"` |
78- | `%Y` | 10進数での年。結果が4桁未満の場合、4桁になるよう左が`0`で埋められる。改良コマンド`%EY`を指定すると、ロケール依存の異なる表現の完全な年を出力する | `"2020"`<br/> `%EY`では`"令和02年"` |
78+ | `%Y` | 10進数での年。結果が4桁未満の場合、4桁になるよう左が`0`で埋められる。改良コマンド`%EY`を指定すると、ロケール依存の異なる表現の完全な年を出力する | `"2020"` |
7979| `%z` | ISO 8601フォーマットでのUTCからのオフセット。例として`-0430`はUTCから4時間30分遅れていることを表す。オフセットがゼロの場合は`+0000`が使用される。改良コマンド`%Ez`と`%Oz`を指定すると、時と分の間にコロン (`:`) が挿入される。オフセット情報が利用可能でない場合、[`std::format_error`](/reference/format/format_error.md)例外を送出する | `"+0900"`<br/>`%Ez`では`"+09:00"` |
8080| `%Z` | タイムゾーンの略称。タイムゾーンの略称が利用可能でない場合、[`std::format_error`](/reference/format/format_error.md)例外を送出する | `"JST"` |
8181| `%%` | 文字`%` | `"%"` |
8282
8383- 便宜上のリテラルキャスト`STATICALLY-WIDEN`を導入する。`STATICALLY-WIDEN<charT>("...")`は、`charT`が`char`である場合は`"..."`、`charT`が`wchar_t`である場合は`L"..."`を意味する。
8484- [`hh_mm_ss`](hh_mm_ss.md)オブジェクトの[`is_negative()`](hh_mm_ss/is_negative.md)が`true`である場合、出力される文字列の先頭に`STATICALLY-WIDEN<charT>("-")`が挿入される
8585
86+ ## 例外
87+ - 指定されたフォーマットフラグに必要な情報が含まれていない場合、[`format_error`](/reference/format/format_error.md)例外が送出される (例として、[`duration`](duration.md)には曜日をフォーマットするために必要な情報が含まれていない)
88+ - ただし、フラグが時刻に関するもの (`%H`, `%I`, `%p`など) である場合、`duration`の特殊化は深夜0時からの経過した時刻として解釈する
89+
90+
91+ ## 例
8692```cpp example
8793#include <iostream>
8894#include <format>
8995#include <chrono>
96+
9097int main()
9198{
92- const auto now = std::chrono::system_clock::now();
93- std::cout << std::format("{:%Y}", now); // => 2021
99+ auto now = std::chrono::system_clock::now(); // UTC時間の現在日時
100+
101+ // 日付を出力
102+ std::cout << std::format("1. {:%Y年%m月%d日}", now) << std::endl;
103+
104+ // 時間を出力。
105+ // 秒単位のtime_pointに変換しないと、小数点以下の秒も出力される
106+ auto now_sec = std::chrono::time_point_cast<std::chrono::seconds>(now);
107+ std::cout << std::format("2. {:%H時%M分%S秒}", now) << std::endl;
108+ std::cout << std::format("3. {:%H時%M分%S秒}", now_sec) << std::endl;
109+ std::cout << std::format("4. {:%p %I時%M分%S秒}", now_sec) << std::endl;
110+ std::cout << std::format("4. {:%p %I時%M分%S秒}", now_sec) << std::endl;
111+
112+ // その他要素
113+ std::cout << std::format("6. {:%C}", now) << std::endl; // 世紀 (100で割って切り下げた値)
114+ std::cout << std::format("7. {:%a}", now) << std::endl; // 曜日の略称
115+ std::cout << std::format("8. {:%A}", now) << std::endl; // 曜日の完全名
94116}
95117```
96118
97- ## 例外
98- - 指定されたフォーマットフラグに必要な情報が含まれていない場合、[ ` format_error ` ] ( /reference/format/format_error.md ) 例外が送出される (例として、[ ` duration ` ] ( duration.md ) には曜日をフォーマットするために必要な情報が含まれていない)
99- - ただし、フラグが時刻に関するもの (` %H ` , ` %I ` , ` %p ` など) である場合、` duration ` の特殊化は深夜0時からの経過した時刻として解釈する
100-
119+ ### 出力例
120+ ```
121+ 1. 2024年09月24日
122+ 2. 08時27分28.1822610秒
123+ 3. 08時27分28秒
124+ 4. AM 08時27分28秒
125+ 6. 20
126+ 7. Tue
127+ 8. Tuesday
128+ ```
101129
102130## バージョン
103131### 言語
104132- C++20
105133
106134### 処理系
107- - [ Clang] ( /implementation.md#clang ) : 9.0 [ mark noimpl ]
108- - [ GCC] ( /implementation.md#gcc ) : 9.2 [ mark noimpl ]
109- - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 3 [ mark noimpl ]
135+ - [ Clang] ( /implementation.md#clang ) : 17 [ mark mark verified ]
136+ - [ GCC] ( /implementation.md#gcc ) : 13 [ mark verified ]
137+ - [ Visual C++] ( /implementation.md#visual_cpp ) : 2019 Update 10 [ mark verified ]
110138
111139
112140## 参照
0 commit comments