名前 | 形式 | 機能説明 | 戻り値 | 使用例 | 属性 | 関連項目 | 注意事項
#include <time.h>size_t strftime(char *restrict s, size_t maxsize, const char *restrict format, const struct tm *restrict 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 で表されている時間で決まります。
% と同じ
省略形式の曜日名 (ロケール固有)
完全形式の曜日名 (ロケール固有)
省略形式の月名 (ロケール固有)
完全形式の月名 (ロケール固有)
日時の表現 (ロケール固有)
%a %b %d %H:%M:%S %Y
これは、Solaris 2.4 より以前に最初にサポートされた標準準拠と同様に、デフォルトの表現です。 standards(5) を参照してください。
date(1) が出力する形式の日時の表現
これは、Solaris 2.4 より以前に最初にサポートされた標準準拠と同様に、デフォルトの表現です。
世紀を 01 から 99 までの数値で表現 (年を 100 で割って整数に切り捨て)
これは、Solaris 2.4 で最初にサポートされて以来、Solaris 10 にいたるまでの標準準拠の表現です。
日 (01 から 31)。
%m/%d/%y 形式で表した日付
日 (1 から 31)。1 桁の場合は前に空白文字が付加される
%Y-%m-%d (ISO 8601:2000 標準の日付形式) と同じ
週をベースにした西暦年の下 2 桁 (00 から 99)
週をベースにした西暦年の完全表示 (0000 から 9999)
省略形式の月名 (ロケール固有)
24 時間表示で表した時 (00 から 23)。
12 時間表示で表した時 (01 から 12)。
年の通算日 (001 から 366)。
24 時間表示で表した時 (0 から 23)。1 桁の場合は前に空白文字が付加される
12 時間表示で表した時 (1 から 12)。1 桁の場合は前に空白文字が付加される
月 (01 から 12)。
分 (00 から 59)。
復帰改行を挿入
午前または午後を表す値 (ロケール固有)
%p を伴った、12 時間表示形式で表した時刻
%H:%M 形式で表した時刻
秒 (00 から 60)。値の範囲が (00 から 59) ではなく、(00 から 60) であるのは、うるう秒に対処するため
タブを挿入
%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)
ISO 8601:2000 標準形式 (+hhmm または -hhmm) の UTC からのオフセットに置き換わります。タイムゾーンがわからない場合には、文字列には置き換えられません。たとえば、"-0430" は、UTC から 4 時間 30 分おくれ (グリニッジから西に離れていること) を意味します。tm_isdst が 0 の場合には、標準時間のオフセットが使用されます。tm_isdst が正の値の場合には、夏時間のオフセットが使用されます。tm_isdst が負の値の場合には、文字列は返されません。
タイムゾーン名または省略形 (タイムゾーンがない場合には文字なし)
上記の変換仕様または後述する変更指定のどれにも 該当しない指定を記述すると、変換結果は未定義で 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 | 対応済み |
| インタフェースの安定性 | strftime() が標準 |
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 標準がこれらの仕様と異なる決定をした場合、仕様は ISO C9x 標準の決定に準拠して変更されます。
Solaris 8 リリースでは、%u の変換仕様が変更されました。この変更は、XPG4 仕様に基づいたものです。
%Z 指示子と zoneinfo タイムゾーンを使用している場合に、入力日時が 20:45:52 UTC, December 13, 1901 から 03:14:07 UTC, January 19, 2038 までの範囲外にある場合、タイムゾーン名が正しくないことがあります。