名前 | 形式 | 機能説明 | 戻り値 | 使用例 | 属性 | 関連項目 | 注意事項
#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 つ以上の文字を伴います。終了 NULL バイトを含む通常文字すべては、そのまま s が示す配列に複写されます。オーバーラップしている複数のオブジェクト間で複写が行われると、変換の結果は予測できません。strftime() の場合は、maxsize を超えないバイト数の文字だけが配列に格納されます。
format が (char *)0 であれば、そのロケールのデフォルト形式が使用されます。strftime() の場合は、デフォルト形式は %c と同じになります。また、cftime() や ascftime() の場合は、デフォルト形式は %C と同じになります。cftime() も ascftime() も、まず環境変数の値 CFTIME を利用しようとしますが、これが未定義または空であれば、デフォルト形式を使用します。
各変換仕様は、以下の一覧に示したように、適切な文字に置き換えられます。適切な文字は、プログラムのロケールの LC_TIME カテゴリと、strftime() と ascftime() の timeptr がポイントする構造体に入っている値、cftime() の clock で表されている時間で決まります。
% と同じ
省略形式の曜日名 (ロケール固有)
完全形式の曜日名 (ロケール固有)
省略形式の月名 (ロケール固有)
完全形式の月名 (ロケール固有)
日時の表現 (ロケール固有)
date(1) が出力する形式の日時の表現
世紀の番号。年を 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 月 4 日およびその年の最初の木曜日の両方を含む週が第 1 週となる。その年の最初の月曜日が 1 月 1 日、2 日、3 日、または 4 日の場合には、その週は前年の最終週の一部になる (「注意事項」を参照)
曜日を表す番号 (0 から 6)。日曜日が 0
その年の何週目かを表す数値 (00 から 53)。第 1 週はその年の最初の月曜日から始まるとする
適切な日付の表現 (ロケール固有)
適切な時間の表現 (ロケール固有)
西暦年の下 2 桁 (00 から 99)
西暦年の完全表示 (たとえば 1993)
タイムゾーン名 (タイムゾーンがない場合には文字なし)
上記の変換仕様または後述する変更指定のどれにも 該当しない指定を記述すると、変換結果は未定義で 0 が返されます。
%U と %W (このほか、後述の %OU と %OW) とでは、何曜日を週の第 1 日目とするかが異なっています。たとえば、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), zoneinfo(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 標準の決定によって変更される可能性があり、変更前の仕様との互換性が保たれないこともあります。
Solaris 8 リリースでは、%u の変換仕様が変更されました。この変更は、XPG4 仕様に基づいたものです。
%Z 指示子と zoneinfo タイムゾーンを使用している場合に、入力日時が 20:45:52 UTC, December 13, 1901 から 03:14:07 UTC, January 19, 2038 までの範囲外にある場合、タイムゾーン名が正しくないことがあります。