Skip to content

Commit e97eeba

Browse files
committed
chronoのformat : 世紀のロケール表現で元号はいまのところ扱われないので削除 #1352
世紀の例を21から20に修正 サンプルコードを追加
1 parent 2a58e28 commit e97eeba

File tree

1 file changed

+41
-13
lines changed

1 file changed

+41
-13
lines changed

reference/chrono/format.md

Lines changed: 41 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
9097
int 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

Comments
 (0)