strftime
From cppreference.com
| ヘッダー <time.h> で定義 |
||
| (C99まで) | ||
| (C99以降) | ||
指定されたカレンダー時刻 tp の日付と時刻の情報を、 フォーマット文字列 format に従って、ヌル終端のマルチバイト文字文字列 str に変換します。最大 count バイトが書き込まれます。
目次 |
[編集] パラメータ
| str | - | 出力用の char 配列の最初の要素へのポインタ |
| count | - | 書き込む最大バイト数 |
| format | - | 変換フォーマットを指定するヌル終端のマルチバイト文字文字列へのポインタ |
| tp | - | フォーマットする時刻を指定する struct tm オブジェクトへのポインタ |
[編集] フォーマット文字列
フォーマット文字列は、0個以上の変換指定子と通常の文字(% を除く)で構成されます。すべての通常の文字(終端のヌル文字を含む)は、変更なしに出力文字列にコピーされます。各変換指定子は % 文字で始まり、オプションで E または O 修飾子(ロケールでサポートされていない場合は無視される)が続き、指定子の動作を決定する文字が続きます。次のフォーマット指定子が利用可能です。
| 変換 指定子 |
説明 | 使用されるフィールド |
|---|---|---|
%
|
リテラルの % を出力します。完全な変換指定子は %% である必要があります。 |
|
n(C99) |
改行文字を出力します。 | |
t(C99) |
水平タブ文字を出力します。 | |
| 年 | ||
Y
|
年を10進数で出力します。例: 2017 | tm_year
|
EY(C99) |
ja_JP ロケールでの 2011年 (2011年) の代わりに、代替表現での年を出力します。例: 平成23年 (23年 平成) | tm_year
|
y
|
年の下2桁を10進数(範囲 [00,99])で出力します。 |
tm_year
|
Oy(C99) |
ja_JP ロケールでの 11 の代わりに、代替数値システムを使用した年の下2桁を出力します。例: 十一 | tm_year
|
Ey(C99) |
ロケールの代替暦期間 %EC からのオフセットとしての年を出力します(ロケール依存)。 |
tm_year
|
C(C99) |
年の上2桁を10進数(範囲 [00,99])で出力します。 |
tm_year
|
EC(C99) |
ja_JP ロケールでの 平成 (平成時代) のように、ロケールの代替表現での基となる年(期間)の名前を出力します。 | tm_year
|
G(C99) |
指定された週を含むISO 8601 週ベースの年を出力します。 ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。
|
tm_year、tm_wday、tm_yday |
g(C99) |
指定された週を含むISO 8601 週ベースの年の下2桁(範囲 [00,99])を出力します。ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。
|
tm_year、tm_wday、tm_yday |
| 月 | ||
b
|
(ロケール依存)省略月の名前を出力します。例: Oct |
tm_mon
|
Ob(C23) |
ロケールの代替表現で**省略形月名**を書き込みます | tm_mon
|
h(C99) |
b の同義語です。 |
tm_mon
|
B
|
(ロケール依存)月のフルネームを出力します。例: October |
tm_mon
|
OB(C23) |
ロケールの代替表現で適切な**月名**を書き込みます | tm_mon
|
m
|
月を10進数(範囲 [01,12])で出力します。 |
tm_mon
|
Om(C99) |
ja_JP ロケールでの 12 の代わりに、代替数値システムを使用した月を出力します。例: 十二 | tm_mon
|
| 週 | ||
U
|
(日曜日を週の最初の曜日とした)年の週を10進数(範囲 [00,53])で出力します。 |
tm_year、tm_wday、tm_yday |
OU(C99) |
ja_JP ロケールでの 52 の代わりに、%U と同様の年の週を代替数値システムを使用して出力します。例: 五十二 |
tm_year、tm_wday、tm_yday |
W
|
(月曜日を週の最初の曜日とした)年の週を10進数(範囲 [00,53])で出力します。 |
tm_year、tm_wday、tm_yday |
OW(C99) |
ja_JP ロケールでの 52 の代わりに、%W と同様の年の週を代替数値システムを使用して出力します。例: 五十二 |
tm_year、tm_wday、tm_yday |
V(C99) |
ISO 8601 の年の週(範囲 [01,53])を出力します。ISO 8601では、週は月曜日から始まり、その年の最初の週は次の要件を満たす必要があります。
|
tm_year、tm_wday、tm_yday |
OV(C99) |
ja_JP ロケールでの 52 の代わりに、%V と同様の年の週を代替数値システムを使用して出力します。例: 五十二 |
tm_year、tm_wday、tm_yday |
| 年の日/月 | ||
j
|
年の日を10進数(範囲 [001,366])で出力します。 |
tm_yday
|
d
|
月のsilylを10進数(範囲 [01,31])で出力します。 |
tm_mday
|
Od(C99) |
ja_JP ロケールでの 27 の代わりに、代替数値システムを使用した0ベースの月のsilylを出力します。例: 二十七 単一の文字の前にスペースが付きます。 |
tm_mday
|
e(C99) |
月のsilylを10進数(範囲 [1,31])で出力します。単一の数字の前にスペースが付きます。 |
tm_mday
|
Oe(C99) |
ja_JP ロケールでの 27 の代わりに、代替数値システムを使用した1ベースの月のsilylを出力します。例: 二十七 単一の文字の前にスペースが付きます。 |
tm_mday
|
| 曜日 | ||
a
|
(ロケール依存)省略曜日の名前を出力します。例: Fri |
tm_wday
|
A
|
(ロケール依存)曜日のフルネームを出力します。例: Friday |
tm_wday
|
w
|
曜日を10進数で出力します。日曜日が 0 です(範囲 [0-6])。 |
tm_wday
|
Ow(C99) |
ja_JP ロケールでの 2 の代わりに、代替数値システムを使用した曜日(日曜日が 0)を出力します。例: 二 |
tm_wday
|
u(C99) |
曜日を10進数で出力します。月曜日が 1 です(ISO 8601 形式)(範囲 [1-7])。 |
tm_wday
|
Ou(C99) |
ja_JP ロケールでの 2 の代わりに、代替数値システムを使用した曜日(月曜日が 1)を出力します。例: 二 |
tm_wday
|
| 時、分、秒 | ||
H
|
時を24時間形式の10進数(範囲 [00-23])で出力します。 |
tm_hour
|
OH(C99) |
ja_JP ロケールでの 18 の代わりに、代替数値システムを使用した24時間形式の時を出力します。例: 十八 | tm_hour
|
I
|
時を12時間形式の10進数(範囲 [01,12])で出力します。 |
tm_hour
|
OI(C99) |
ja_JP ロケールでの 06 の代わりに、代替数値システムを使用した12時間形式の時を出力します。例: 六 | tm_hour
|
M
|
分を10進数(範囲 [00,59])で出力します。 |
tm_min
|
OM(C99) |
ja_JP ロケールでの 25 の代わりに、代替数値システムを使用した分を出力します。例: 二十五 | tm_min
|
S
|
秒を10進数(範囲 [00,60])で出力します。 |
tm_sec
|
OS(C99) |
ja_JP ロケールでの 24 の代わりに、代替数値システムを使用した秒を出力します。例: 二十四 | tm_sec
|
| その他 | ||
c
|
(ロケール依存)標準の日付と時刻の文字列を出力します。例: Sun Oct 17 04:41:13 2010 |
すべて |
Ec(C99) |
ja_JP ロケールでの 2011年 (2011年) の代わりに、平成23年 (23年 平成) を使用するなど、代替の日付と時刻の文字列を出力します。 | すべて |
x
|
(ロケール依存)ローカライズされた日付表現を出力します。 | すべて |
Ex(C99) |
ja_JP ロケールでの 2011年 (2011年) の代わりに、平成23年 (23年 平成) を使用するなど、代替の日付表現を出力します。 | すべて |
X
|
(ロケール依存)ローカライズされた時刻表現を出力します。例: 18:40:20 または 6:40:20 PM。 | すべて |
EX(C99) |
(ロケール依存)代替の時刻表現を出力します。 | すべて |
D(C99) |
"%m/%d/%y" と同等です。 | tm_mon、tm_mday、tm_year |
F(C99) |
"%Y-%m-%d" (ISO 8601 日付フォーマット) と同等です。 | tm_mon、tm_mday、tm_year |
r(C99) |
(ロケール依存)ローカライズされた12時間形式の時刻を出力します。 | tm_hour、tm_min、tm_sec |
R(C99) |
"%H:%M" と同等です。 | tm_hour、tm_min |
T(C99) |
"%H:%M:%S" (ISO 8601 時刻フォーマット) と同等です。 | tm_hour、tm_min、tm_sec |
p
|
(ロケール依存)ローカライズされた午前または午後を出力します。 | tm_hour
|
z(C99) |
ISO 8601 形式でのUTCからのオフセット(例: -0430)を出力します。タイムゾーン情報が利用できない場合は何も出力しません。 |
tm_isdst
|
Z
|
(ロケール依存)タイムゾーン名または略称を出力します。タイムゾーン情報が利用できない場合は何も出力しません。 | tm_isdst
|
[編集] 戻り値
成功した場合、 str が指す文字配列に書き込まれたバイト数(終端の '\0' を除く)。 count バイトに達する前に文字列全体を格納できなかった場合、 0 が返され、内容は不定となります。
[編集] 例
このコードを実行
#include <locale.h> #include <stdio.h> #include <time.h> int main(void) { char buff[70]; struct tm my_time = { .tm_year=112, // = year 2012 .tm_mon=9, // = 10th month .tm_mday=9, // = 9th day .tm_hour=8, // = 8 hours .tm_min=10, // = 10 minutes .tm_sec=20 // = 20 secs }; if (strftime(buff, sizeof buff, "%A %c", &my_time)) puts(buff); else puts("strftime failed"); setlocale(LC_TIME, "el_GR.utf8"); if (strftime(buff, sizeof buff, "%A %c", &my_time)) puts(buff); else puts("strftime failed"); }
実行結果の例
Sunday Sun Oct 9 08:10:20 2012 Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST
[編集] 参考文献
- C23標準 (ISO/IEC 9899:2024)
- 7.27.3.5 strftime 関数 (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.27.3.5 strftime 関数 (p: 288-291)
- C11標準 (ISO/IEC 9899:2011)
- 7.27.3.5 strftime 関数 (p: 394-397)
- C99標準 (ISO/IEC 9899:1999)
- 7.23.3.5 strftime 関数 (p: 343-347)
- C89/C90標準 (ISO/IEC 9899:1990)
- 4.12.3.5 strftime 関数
[編集] 関連項目
| (C23で非推奨)(C11) |
tm オブジェクトをテキスト表現に変換する (関数) |
| (C23で非推奨)(C11) |
time_t オブジェクトをテキスト表現に変換する (関数) |
| (C95) |
tm オブジェクトをカスタムワイド文字列のテキスト表現に変換します (関数) |
| C++ ドキュメント strftime
| |