この関数の目的
strftime()は、展開時間を文字列にフォーマットする。
定義
#include <time.h> size_t strftime(char *s, size_t maxsize, const char *format, const struct tm *timeptr);
働き
この関数は、 s が指す配列に format に制御される文字列を格納する。
書式は複バイト文字の連なりで、初期シフト状態に始まり初期シフト状態で終わらなければならない。
format 文字列はゼロ以上の変換指定子と普通の複バイト文字より成っている。
変換指定子は一文字の % とその後の変換動作を決定する一文字より成っている。
終端のヌル文字を含む、全ての通常の複バイト文字は、変更を加えられずに配列に転写される。
複写が重複するオブジェクト間で発生した場合の動作は未定義である。
maxsize 以下の文字が配列に格納される。各変換指定子は以下に説明する文字列によって置き換えられる。
適切な文字列は LC_TIME
分野のロケールおよび timeptr が指すオブジェクトにより決定される。
%a | ロケールでの曜日の略名で置換される |
%A | ロケールでの曜日の名前で置換される |
%b | ロケールでの月の略名で置換される |
%B | ロケールでの月の名前で置換される |
%c | ロケールでの適切な日付と時刻で置換される |
%d | 月の中の日が十進数で置換される(01-31) |
%H | (24時間時計での)時間が十進数で置換される(00-23) |
%I | (12時間時計での)時間が十進数で置換される(01-12) |
%j | 年の中の日が十進数で置換される(001-366) |
%m | 月が十進数で置換される(01-12) |
%M | 分が十進数で置換される(00-59) |
%p | ロケールでの、12時間時計でいう午前・午後に相当する文字列で置換される |
%S | 秒が十進数で置換される(00-61) |
%U | 年の始まりから経過した週の数(最初の日曜を最初の週の最初の日として)が十進数で置換される(00-53) |
%w | 日曜を0として、曜日が十進数で置換される(0-6) |
%W | 年の始まりから経過した週の数(最初の月曜を最初の週の最初の日として)が十進数で置換される(00-53) |
%x | ロケールでの適切な日付表現で置換される |
%X | ロケールでの適切な時刻表現で置換される |
%y | 世紀を除いた年が十進数で置換される(00-99) |
%Y | 世紀を含んだ年が十進数で置換される |
%z | 時間帯の略名か、時間帯が決定されない場合は空文字列で置換される |
%% | %で置換される |
変換指定子が上記のものに該当しない場合の動作は未定義である。
返り値は、終端のヌル文字を含む結果の文字数が maxsize 以下なら、 s が指す配列に配置された終端のヌル文字を含まない文字数である。 そうでなければゼロが返り、配列の内容は不定になる。
解説
sprintf() に似た変換を行う関数であるが、 これは展開時間のフォーマット専用である。