std::strftime
From cppreference.com
| ヘッダ <ctime> で定義 |
||
| std::size_t strftime( char* str, std::size_t count, const char* format, const std::tm* tp ); |
||
指定されたカレンダ時刻 tp の日時情報を、フォーマット文字列 format に従って、ヌル終端のマルチバイト文字文字列 str に変換します。最大 count バイトが書き込まれます。
目次 |
[編集] パラメータ
| str | - | 出力用の char 配列の最初の要素へのポインタ |
| count | - | 書き込む最大バイト数 |
| format | - | 変換フォーマットを指定する、ヌル終端のマルチバイト文字文字列へのポインタ |
| tp | - | 変換される日時情報を含むオブジェクトへのポインタ |
[編集] フォーマット文字列
フォーマット文字列は、0個以上の変換指定子と通常の文字(% を除く)で構成されます。すべての通常の文字(終端のヌル文字を含む)は、変更なしに出力文字列にコピーされます。各変換指定子は % 文字で始まり、オプションで E または O 修飾子(ロケールでサポートされていない場合は無視される)が続き、指定子の動作を決定する文字が続きます。次のフォーマット指定子が利用可能です。
| 変換 指定子 |
説明 | 使用されるフィールド |
|---|---|---|
%
|
リテラルの % を出力します。完全な変換指定子は %% である必要があります。 |
|
n(C++11) |
改行文字を出力します。 | |
t(C++11) |
水平タブ文字を出力します。 | |
| 年 | ||
Y
|
年を10進数で出力します。例: 2017 | tm_year
|
EY(C++11) |
ja_JP ロケールでの 2011年 (2011年) の代わりに、代替表現での年を出力します。例: 平成23年 (23年 平成) | tm_year
|
y
|
年の下2桁を10進数(範囲 [00,99])で出力します。 |
tm_year
|
Oy(C++11) |
ja_JP ロケールでの 11 の代わりに、代替数値システムを使用した年の下2桁を出力します。例: 十一 | tm_year
|
Ey(C++11) |
ロケールの代替暦期間 %EC からのオフセットとしての年を出力します(ロケール依存)。 |
tm_year
|
C(C++11) |
年の上2桁を10進数(範囲 [00,99])で出力します。 |
tm_year
|
EC(C++11) |
ja_JP ロケールでの 平成 (平成時代) のように、ロケールの代替表現での基となる年(期間)の名前を出力します。 | tm_year
|
G(C++11) |
指定された週を含むISO 8601 週ベースの年を出力します。 ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。
|
tm_year、tm_wday、tm_yday |
g(C++11) |
指定された週を含むISO 8601 週ベースの年の下2桁(範囲 [00,99])を出力します。ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。
|
tm_year、tm_wday、tm_yday |
| 月 | ||
b
|
(ロケール依存)省略月の名前を出力します。例: Oct |
tm_mon
|
h(C++11) |
b の同義語です。 |
tm_mon
|
B
|
(ロケール依存)月のフルネームを出力します。例: October |
tm_mon
|
m
|
月を10進数(範囲 [01,12])で出力します。 |
tm_mon
|
Om(C++11) |
ja_JP ロケールでの 12 の代わりに、代替数値システムを使用した月を出力します。例: 十二 | tm_mon
|
| 週 | ||
U
|
(日曜日を週の最初の曜日とした)年の週を10進数(範囲 [00,53])で出力します。 |
tm_year、tm_wday、tm_yday |
OU(C++11) |
ja_JP ロケールでの 52 の代わりに、%U と同様の年の週を代替数値システムを使用して出力します。例: 五十二 |
tm_year、tm_wday、tm_yday |
W
|
(月曜日を週の最初の曜日とした)年の週を10進数(範囲 [00,53])で出力します。 |
tm_year、tm_wday、tm_yday |
OW(C++11) |
ja_JP ロケールでの 52 の代わりに、%W と同様の年の週を代替数値システムを使用して出力します。例: 五十二 |
tm_year、tm_wday、tm_yday |
V(C++11) |
ISO 8601 の年の週(範囲 [01,53])を出力します。ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。
|
tm_year、tm_wday、tm_yday |
OV(C++11) |
ja_JP ロケールでの 52 の代わりに、%V と同様の年の週を代替数値システムを使用して出力します。例: 五十二 |
tm_year、tm_wday、tm_yday |
| 年の日/月 | ||
j
|
年の日を10進数(範囲 [001,366])で出力します。 |
tm_yday
|
d
|
月のsilylを10進数(範囲 [01,31])で出力します。 |
tm_mday
|
Od(C++11) |
ja_JP ロケールでの 27 の代わりに、代替数値システムを使用した0ベースの月のsilylを出力します。例: 二十七 単一の文字の前にスペースが付きます。 |
tm_mday
|
e(C++11) |
月のsilylを10進数(範囲 [1,31])で出力します。単一の数字の前にスペースが付きます。 |
tm_mday
|
Oe(C++11) |
ja_JP ロケールでの 27 の代わりに、代替数値システムを使用した1ベースの月のsilylを出力します。例: 二十七 単一の文字の前にスペースが付きます。 |
tm_mday
|
| 曜日 | ||
a
|
(ロケール依存)省略曜日の名前を出力します。例: Fri |
tm_wday
|
A
|
(ロケール依存)曜日のフルネームを出力します。例: Friday |
tm_wday
|
w
|
曜日を10進数で出力します。日曜日が 0 です(範囲 [0-6])。 |
tm_wday
|
Ow(C++11) |
ja_JP ロケールでの 2 の代わりに、代替数値システムを使用した曜日(日曜日が 0)を出力します。例: 二 |
tm_wday
|
u(C++11) |
曜日を10進数で出力します。月曜日が 1 です(ISO 8601 形式)(範囲 [1-7])。 |
tm_wday
|
Ou(C++11) |
ja_JP ロケールでの 2 の代わりに、代替数値システムを使用した曜日(月曜日が 1)を出力します。例: 二 |
tm_wday
|
| 時、分、秒 | ||
H
|
時を24時間形式の10進数(範囲 [00-23])で出力します。 |
tm_hour
|
OH(C++11) |
ja_JP ロケールでの 18 の代わりに、代替数値システムを使用した24時間形式の時を出力します。例: 十八 | tm_hour
|
I
|
時を12時間形式の10進数(範囲 [01,12])で出力します。 |
tm_hour
|
OI(C++11) |
ja_JP ロケールでの 06 の代わりに、代替数値システムを使用した12時間形式の時を出力します。例: 六 | tm_hour
|
M
|
分を10進数(範囲 [00,59])で出力します。 |
tm_min
|
OM(C++11) |
ja_JP ロケールでの 25 の代わりに、代替数値システムを使用した分を出力します。例: 二十五 | tm_min
|
S
|
秒を10進数(範囲 [00,60])で出力します。 |
tm_sec
|
OS(C++11) |
ja_JP ロケールでの 24 の代わりに、代替数値システムを使用した秒を出力します。例: 二十四 | tm_sec
|
| その他 | ||
c
|
(ロケール依存)標準の日付と時刻の文字列を出力します。例: Sun Oct 17 04:41:13 2010 |
すべて |
Ec(C++11) |
ja_JP ロケールでの 2011年 (2011年) の代わりに、平成23年 (23年 平成) を使用するなど、代替の日付と時刻の文字列を出力します。 | すべて |
x
|
(ロケール依存)ローカライズされた日付表現を出力します。 | すべて |
Ex(C++11) |
ja_JP ロケールでの 2011年 (2011年) の代わりに、平成23年 (23年 平成) を使用するなど、代替の日付表現を出力します。 | すべて |
X
|
(ロケール依存)ローカライズされた時刻表現を出力します。例: 18:40:20 または 6:40:20 PM。 | すべて |
EX(C++11) |
(ロケール依存)代替の時刻表現を出力します。 | すべて |
D(C++11) |
"%m/%d/%y" と同等です。 | tm_mon、tm_mday、tm_year |
F(C++11) |
"%Y-%m-%d" (ISO 8601 日付フォーマット) と同等です。 | tm_mon、tm_mday、tm_year |
r(C++11) |
(ロケール依存)ローカライズされた12時間形式の時刻を出力します。 | tm_hour、tm_min、tm_sec |
R(C++11) |
"%H:%M" と同等です。 | tm_hour、tm_min |
T(C++11) |
"%H:%M:%S" (ISO 8601 時刻フォーマット) と同等です。 | tm_hour、tm_min、tm_sec |
p
|
(ロケール依存)ローカライズされた午前または午後を出力します。 | tm_hour
|
z(C++11) |
ISO 8601 形式でのUTCからのオフセット(例: -0430)を出力します。タイムゾーン情報が利用できない場合は何も出力しません。 |
tm_isdst
|
Z
|
(ロケール依存)タイムゾーン名または略称を出力します。タイムゾーン情報が利用できない場合は何も出力しません。 | tm_isdst
|
[編集] 戻り値
str が指す文字配列に書き込まれたバイト数。正常終了時には、終端の '\0' は含まれません。指定された count バイトに達する前に文字列全体を格納できなかった場合、0 が返され、内容は不定になります。
[編集] 例
このコードを実行
#include <ctime> #include <iostream> #include <iterator> #include <locale> void utcExample() { // Example of the very popular RFC 3339 format UTC time std::time_t time = std::time({}); char timeString[std::size("yyyy-mm-ddThh:mm:ssZ")]; std::strftime(std::data(timeString), std::size(timeString), "%FT%TZ", std::gmtime(&time)); std::cout << timeString << '\n'; } int main() { std::time_t t = std::time(nullptr); char mbstr[100]; if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t))) std::cout << mbstr << '\n'; std::locale::global(std::locale("ja_JP.utf8")); if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t))) std::cout << mbstr << '\n'; utcExample(); }
実行結果の例
Tuesday Tue Sep 7 19:40:35 2021 火曜日 2021年09月07日 19時40分35秒 2021-09-07T19:40:35Z
[編集] 関連項目
| std::tm オブジェクトをテキスト表現に変換する (関数) | |
| std::time_t オブジェクトをテキスト表現に変換する (関数) | |
| std::tmオブジェクトをカスタムワイド文字列のテキスト表現に変換する (関数) | |
| (C++11) |
指定されたフォーマットに従って日付/時刻の値をフォーマットして出力する (関数テンプレート) |
hh_mm_ss の書式設定サポート(クラス テンプレートの特殊化) | |
| C のドキュメント ( strftime )
| |