wcsftime
From cppreference.com
| ヘッダー <wchar.h> で定義 |
||
| (C95 以降) | ||
指定されたカレンダー時刻 `time` の日付と時刻情報を、フォーマット文字列 `format` に従って、NULL終端のワイド文字列 `str` に変換します。最大 `count` バイトが書き込まれます。
目次 |
[編集] パラメータ
| str | - | 出力用の `wchar_t` 配列の最初の要素へのポインタ |
| count | - | 書き込むワイド文字の最大数 |
| format | - | 変換のフォーマットを指定するNULL終端のワイド文字列へのポインタ |
[編集] フォーマット文字列
フォーマット文字列は、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` が指すワイド文字配列に書き込まれたワイド文字数。正常終了時、終端の `L'\0'` は含みません。文字列全体を格納する前に `count` に達した場合、`0` を返し、内容は未定義となります。
[編集] 例
このコードを実行
#include <locale.h> #include <stdio.h> #include <time.h> #include <wchar.h> int main(void) { wchar_t buff[40]; 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 (wcsftime(buff, sizeof buff, L"%A %c", &my_time)) printf("%ls\n", buff); else puts("wcsftime failed"); setlocale(LC_ALL, "ja_JP.utf8"); if (wcsftime(buff, sizeof buff, L"%A %c", &my_time)) printf("%ls\n", buff); else puts("wcsftime failed"); }
出力
Sunday Sun Oct 9 08:10:20 2012 日曜日 2012年10月09日 08時10分20秒
[編集] 参照
- C23標準 (ISO/IEC 9899:2024)
- 7.29.5.1 The wcsftime function (p: TBD)
- C17標準 (ISO/IEC 9899:2018)
- 7.29.5.1 The wcsftime function (p: 230-231)
- C11標準 (ISO/IEC 9899:2011)
- 7.29.5.1 The wcsftime function (p: 439-440)
- C99標準 (ISO/IEC 9899:1999)
- 7.24.5.1 The wcsftime function (p: 385-386)
[編集] 関連項目
| tm オブジェクトをカスタムのテキスト表現に変換する (関数) | |
| C++ドキュメント (`wcsftime`について)
| |