標準/拡張機能 | C/C++ | 依存項目 |
---|---|---|
ISO C |
両方 |
#include <time.h>
size_t strftime(char * __restrict__ dest, size_t maxsize,
const char * __restrict__ format, const struct tm * __restrict__ timeptr);
変換される文字は、現行ロケールの LC_CTYPE カテゴリー および timeptr で示される時間構造体の値によって、判別されます。timeptr が示す時間構造体は、通常は gmtime() または localtime() 関数の呼び出しにより取得されます。
指定子 | 意味 |
---|---|
%a | ロケールの省略曜日名と置換。 |
%A | ロケールの正式曜日名と置換。 |
%b | ロケールの省略月名と置換。 |
%B | ロケールの正式月名と置換。 |
%c | ロケールの日時と置換。 |
%C | ロケールの世紀数 (100 で除算し、切り捨てた年) と置換。 |
%d | 1 カ月の日 (01 ~ 31) と置換。 |
%D | ロケールに関係なく、日付を mm/dd/yy 形式で挿入。 |
%e | 1 カ月の日を 10 進数で挿入 (01 ~ 31)。C POSIX でのみ、これは 2 文字、右寄せのブランク・フィールド です。 |
%E[cCxyY] | 代替日時形式が利用できない場合は、%E 記述子が拡張されていないもう一方にマップされます。例えば、%EC は %C にマップされます。 |
%Ec | ロケールの代替日時表示と置換。 |
%EC | ロケールの代替表示の基本年 (期間) 名と置換。 |
%Ex | ロケールの代替日付表示と置換。 |
%EX | ロケールの代替時間表示と置換。 |
%Ey | ロケールの代替表示の %EC (年のみ) からのオフセットと 置換。 |
%EY | 正式代替年表示と置換。 |
%F | ISO 8601:2000 標準日付形式と置換 (%Y-%m-%d に相当)。値は、struct tm のメンバー (tm_year、tm_mon、および tm_mday) から得られます。 |
%g | 10 進数で表される、週に基づいた年号の末尾 2 桁 (00 から 99) と置換。 |
%G | 4 桁の 10 進数で表される、週に基づいた年号と置換。 |
%h | ロケールの省略月名と置換。これは %b と同じです。 |
%H | 10 進数 (00 ~ 23) で時間 (24 時間時計) と置換。 |
%I | 10 進数 (01 ~ 12) で時間 (12 時間時計) と置換。 |
%j | 1 年の日 (001 ~ 366) と置換。 |
%m | 月 (01 ~ 12) と置換。 |
%M | 分 (00 ~ 59) と置換。 |
%n | 改行と置換。 |
%O[deHImMSUwWy] | 代替日時形式が利用できない場合は、%E 記述子が拡張されていないもう一方にマップされます。例えば、%Od は %d にマップされます。 |
%Od | ロケールの代替数字シンボルを使用し、必要に応じ、ゼロの代替シンボル がある場合には先行ゼロ、そうでない場合には、先行スペースで 充てんした 1 カ月の日と置換。 |
%Oe | ロケールの代替シンボルを使用して、月の日付 (必要な場合には、先行スペースで充てんされる) と置換。 |
%OH | ロケールの代替シンボルを使用して、時間 (24 時間時計) と置換。 |
%OI | ロケールの代替シンボルを使用して、時間 (12 時間時計) と置換。 |
%Om | ロケールの代替数字シンボルを使用し、月と置換。 |
%OM | ロケールの代替数字シンボルを使用し、分と置換。 |
%OS | ロケールの代替数字シンボルを使用し、秒と置換。 |
%Ou | ロケールの代替表示の数を使用して、曜日と置換 (月曜=1)。 |
%OU | ロケールの代替数字シンボルを使用して、年の週番号 (日曜を週の初日とする、%U に対応する規則) と置換。 |
%OV | ロケールの代替数字シンボルを使用して、年の週番号 (月曜を週の初日とする、%V に対応する規則) と置換。 |
%Ow | ロケールの代替数字シンボルを使用し、曜日 (日曜 =0) と置換。 |
%OW | ロケールの代替数字シンボルを使用して、1 年の週数と置換 (月曜 を週の初日とする)。 |
%Oy | ロケールの代替表示で、ロケールの代替数字シンボルを使用して、年と置換 (%C からのオフセット)。 |
%p | AM または PM のロケールの同値と置換。 |
%r | %I:%M:%S %p と等しいストリングと置換。またはあれば、LC_TIME からの t_fmt_ampm を使用。 |
%R | 24 時間表記 (%H:%M) の時間と置換。 |
%S | 10 進数の秒数 (00 から 60) と置換。 |
%t | タブと置換。 |
%T | %H:%M:%S と等しいストリングと置換。 |
%u | 月曜を 1 で表示し、曜日を 10 進数 (1 ~ 7) と置換。 |
%U | 日曜を週の初日とした 1 年の週数 (00 ~ 53) と置換。1 月の最初の日曜日が第 1 週の初日です。これより前の新年の日は第 0 週となります。 |
%V | 月曜を週の初日とした 1 年の週数 (01 ~ 53) と置換。新年の 1 月 1 日を含む週に 4 日以上の日がある場合、その週が第 1 週とみなされます。そうでない場合、その週は前年の最後の週とみなされ、次の週が第 1 週となります。1 月 4 日と 1 月の最初の木曜日の両方とも常に第 1 週にあります。 |
%w | 日曜が 0 の曜日 (0 ~ 6) と置換。 |
%W | 月曜を週の初日とした 1 年の週数 (00 ~ 53) と置換。 |
%x | ロケールの日付表示と置換。 |
%X | ロケールの時間表示と置換。 |
%y | 世紀でない年 (00 ~ 99) と置換。 |
%Y | 世紀の年と置換。 |
%z | ISO8601:2000 標準形式の UTC からのオフセット (+hhmm または -hhmm) と置換。例えば、「-0430」は UTC より 4 時間 30 分の遅れを意味しています (グリニッジの西側)。tm_isdst がゼロの場合は、標準時刻オフセットが使用されます。tm_isdst がゼロより大きい場合は、夏時間調整オフセットが使用されます。tm_isdst が負の場合、または時間帯を判別できない場合は、文字は戻されません。 |
%Z | 時間帯の名前と置換する、または時間帯が利用できない場合 は、文字なし。 |
%% | % と置換。 |
データの形式はディレクティブだが、上記のいずれでもない場合には、% に続く文字が出力にコピーされます。
コピー中のオブジェクトがオーバーラップする場合、その動作は未定義です。maxsize によって、配列にコピーできる 文字の最大数が指定できます。
strftime() が POSIX 以外のアプリケーションにより呼び出されると、これにより、LC_TOD ロケール・カテゴリーから適切な時間帯名情報が 取得されます。時間帯名情報が現行 LC_TOD ロケール・カテゴリーで未指定の場合には、標準時間名であれば STD、夏時間名であれば DST、協定世界時 (UTC) 名であれば UTC が、それぞれの デフォルトになります。
strftime() への時間構造体入力の tm_isdst フラグ により、%Z を標準または夏時間名文字で置き換えるかどうかが 決定されます。標準または夏時間名文字が現行 LC_TOD ロケール・カテゴリー で、または解析 TZ から使用不可の場合には、strftime() により 標準の場合には STD、夏時間名の場合には文字 DST が使用されます。
strftime() への tm 構造体入力が gmtime() 関数に よって作成された場合には、strftime() は、%Z を現行 LC_TOD ロケール・カテゴリーで 指定された UCTNAME 文字で、または UCTNAME が指定 されない場合には、UTC で置き換えます。
正常に実行された場合、strftime() は、配列中に入れられた文字数 (バイト数) を、終了 NULL 文字を含まずに、戻します。
正常に実行されなかった場合、strftime() は、0 を戻し、ストリングの内容は不確定となります。
⁄* CELEBS42
This example places characters into the array dest and prints
the resulting string.
*⁄
#include <stdio.h>
#include <time.h>
int main(void)
{
char dest[70];
int ch;
time_t temp;
struct tm *timeptr;
temp = time(NULL);
timeptr = localtime(&temp);
ch = strftime(dest,sizeof(dest)-1,"Today is %A,"
" %b %d. ¥n Time: %I:%M %p", timeptr);
printf("%d characters placed in string to make: ¥n ¥n %s", ch, dest);
}
44 characters placed in string to make:
Today is Friday, Jun 16.
Time: 03:07 PM