名前 | 形式 | 機能説明 | 戻り値 | 使用例 | 属性 | 関連項目 | 注意事項
#include <time.h>size_t strftime(const char *s, size_t maxsize, const char *format, const struct tm *timeptr);
strftime()、ascftime()、cftime() 関数は、format が指す文字列の制御に従って、何バイトかの文字を s が指す配列に格納します。format 文字列は、0 またはそれ以上の変換仕様文字および通常文字からなります。変換仕様は、パーセント記号 (%) の後に、変換の内容を表す 1 つまたは 2 つの文字を伴います。すべての通常文字 (終了 NULL 文字を含む) はそのまま s が示す配列に複写されます。重なりあっている複数のオブジェクト間で複写が行われると、変換の結果は予測できません。strftime() については、maxsize を超えないバイト数の文字だけが配列に格納されます。
format が (char *)0 であれば、そのロケールのデフォルト形式が使用されます。strftime() については、デフォルト形式は %c と同じで、cftime() および ascftime() については、デフォルト形式は %C と同じです。cftime() および ascftime() はまず環境変数の値 CFTIME を利用しようとしますが、これが未定義または空であれば、デフォルト形式が使用されます。
各変換仕様は、以下の一覧に記載した適切な文字に置き換えられます。適切な文字は、プログラムのロケールの LC_TIME カテゴリ、strftime() および ascftime() の timeptr が指す構造体に入っている値、さらに cftime() の clock によって表される時間で決まります。
% と同じ
ロケール固有の、省略形式の曜日名
ロケール固有の、完全形式の曜日名
ロケール固有の、省略形式の月名
ロケール固有の、完全形式の月名
ロケール固有の、日時の表現
世紀の番号。年を 100 で除算して余りを切り捨てて得られる 1 から 99 までの整数。1 桁の場合は前に 0 が付加される (standards(5) を参照)
日 (1 から 31)。1 桁の場合は前に 0 が付加される
%m/%d/%y 形式で表した日付
日 (1 から 31)。1 桁の場合は前に空白文字が付加される
週をベースにした西暦年の下 2 桁 (00 から 99)
週をベースにした西暦年の完全表示 (0000 から 9999)
ロケール固有の、省略形式の月名
24 時間表示で表した時 (0 から 23)。1 桁の場合は前に 0 が付加される
12 時間表示で表した時 (1 から 12)。1 桁の場合は前に 0 が付加される
年の通算日 (1 から 366)。3 桁未満の場合は前に 0 が付加される
24 時間表示で表した時 (0 から 23)。1 桁の場合は前に空白文字が付加される
12 時間表示で表した時 (1 から 12)。1 桁の場合は前に空白文字が付加される
月 (1 から 12)。1 桁の場合は前に 0 が付加される
分 (00 から 59)。先行する 0 は任意
復帰改行を挿入
ロケール固有の、午前または午後を表す値
%p を伴った、12 時間表示形式で表した時刻
%H:%M 形式で表した時刻
秒 (00 から 61)。値の範囲が (00 から 59) ではなく (00 から 61) であるのは、うるう秒および 二重うるう秒に対処するため
タブを挿入
%H:%M:%S 形式で表した時刻
曜日を表す番号 (1 から 7)。日曜日が 1
その年の何週目かを表す数値 (00 から 53)。第 1 週はその年の最初の日曜日から始まるとする。
ISO 8601 で何週目かを表す数値 (01 から 53)。ISO 8601 の週をベースとするシステムでは、週は月曜日から始まり、1 月 1 日およびその年の最初の木曜日の両方を含む週が第 1 週となる。その年の最初の月曜日が 1 月 1 日 、2 日、3 日、または 4 日の場合には、その週は前年の最終週の一部になる (「注意事項」を参照)。
曜日を表す番号 (0 から 6)。日曜日が 0
その年の何週目かを表す数値 (00 から 53)。第 1 週はその年の最初の月曜日から始まるとする。
ロケール固有の、適切な日付の表現
ロケール固有の、適切な時間の表現
西暦年の下 2 桁 (00 から 99)
西暦年の完全表示 (たとえば 1993)
時間帯名 (時間帯がない場合には文字なし)
上記の変換仕様または後述する変更指定のどれにも 該当しない指定を記述すると、変換結果は未定義で 0 が返されます。
何曜日を週の第 1 日目として数えるかは、%U と %W (および後述する %OU と %OW) とでは違います。週番号 1 は 1 月の第 1 週目ですが、%U については日曜日から始まり、%W については月曜日から始まります。週番号 0 には、%U では 1 月の第 1 日曜日より前の日が、%W では 1 月の第 1 月曜日より前の日が入っています。
上記の変換仕様に対して、変更を表す文字 E または O を付加することができます。これにより、代替形式または代替指定で値を得ることが可能です。希望した代替形式または代替指定が 現ロケール中に存在していなければ、変更を示す文字を指定しなかった場合の形式で値が得られます。
ロケール固有の、適切な日付および時刻の代替形式
ロケール固有の、代替表示形式として指定されている年号
ロケール固有の、代替表示形式として指定されている年号 (%EC) に対応した週をベースとした年
完全形式の週をベースとした代替年表示
ロケール固有の、日付の代替表示形式
ロケール固有の、時刻の代替表示形式
ロケール固有の、代替表示形式として指定されている年号 (%EC) に対応した年
完全形式の代替年表示
日をロケール固有の代替数値記号で表す
%Od と同じ
ロケール固有の週をベースとした代替表示の年 (%C に対応) の値を、ロケール固有の代替数値記号で表す
24 時間表示での時をロケール固有の代替数値記号で表す
12 時間表示での時をロケール固有の代替数値記号で表す
月をロケール固有の代替数値記号で表す
分をロケール固有の代替数値記号で表す
秒をロケール固有の代替数値記号で表す
週日を示す値をロケール固有の代替数値記号にある数字で表す
その年の何週目かをロケール固有の代替数値記号で表す。週は日曜日から始まるとする
曜日を示す値をロケール固有の代替数値記号で表す。日曜日を 0 とする
その年の何週目かをロケール固有の代替数値記号で表す。週は月曜日から始まるとする
ロケール固有の代替表示の年 (%C に対応) の値を、ロケール固有の代替数値記号で表す
デフォルトでは、strftime()、cftime()、ascftime() は米国英語で表示されます。ユーザーは、setlocale() において LC_TIME カテゴリのロケールを設定することで strftime()、cftime()、または ascftime() を特定の言語で出力するように要求できます。
tzset(3C) を呼び出した場合に得られるものと同じ時間帯情報が用いられます。
strftime()、cftime()、ascftime() 関数は、s が示す配列に書き出した文字数を返します。これには終了 NULL 文字は含まれません。生成された文字の合計数 (終了 NULL 文字を含む) が maxsize を超えていると、strftime() は、0 を返し、配列の内容は未確定になります。
ここでは、POSIX ロケールの strftime() の使用例を示します。tmptr が指す構造体に 1986 年 8 月 28 日木曜日 12 時 44 分 36 秒 に対応する値が入っている場合、文字列 str の内容がどうなるかを示します。
strftime (str, strsize, "%A %b %d %j", tmptr)
これにより str の内容は、"Thursday Aug 28 240" となります。
次の属性については attributes(5) のマニュアルページを参照してください。
属性タイプ | 属性値 |
---|---|
MT レベル | MT-safe |
CSI | 対応済み |
date(1), ctime(3C), mktime(3C), setlocale(3C), strptime(3C), tzset(3C), TIMEZONE(4), attributes(5), environ(5), standards(5)
Solaris 7 では、%V の変換仕様が変わりました。 この変更は、現時点での ISO C9x 標準の公式の参照ドキュメントに基づいています。以前の仕様では、1 月 1 日を含む週に、4 日未満の日数の新しい年が含まれている場合、その週は前年の第 53 週となりましたが、ISO C9x 標準委員会によって、この仕様が正しくないと判断されました。
%g、%G、%Eg、%EG、および %Og の変換仕様が Solaris 7 に追加されました。この変更は、現時点での ISO C9x 標準の公式の参照ドキュメントに基づいています。これらの仕様は開発段階であるため、ISO C9x 標準が他の結論に達した場合、その決定に合わせるよう変更される予定です。