strftime() — 日付/時刻からストリングへの変換

フォーマット

#include <time.h>
size_t strftime(char *s, size_t maxsize, const char *format,
                   const struct tm *timeptr);

言語レベル: ANSI

スレッド・セーフ: はい。

ロケール依存: この関数の振る舞いは、 現行ロケールの LC_CTYPE、LC_TIME、および LC_TOD カテゴリーの影響を 受ける可能性があります。詳細については、CCSID およびロケールの理解を参照してください。

説明

strftime() 関数は、format が指す制御ストリングで指定された形式で、 s が指す配列にバイトを入れます。書式ストリングは、ゼロ個以上の変換指定と 普通文字で構成されています。変換指定は、% 文字と 変換の振る舞いを決定する終了変換文字で構成されています。 すべての普通文字 (終了ヌル・バイトおよびマルチバイト文字を含む) は、 変更されないまま配列にコピーされます。オーバーラップしたオブジェクト間で コピーが行われる場合には、振る舞いは予期できません。 maxsize までのバイトが配列に入ります。 該当する文字は、timeptr が指す構造体に含まれる値 と現行ロケールに保管された値によって決定されます。

標準変換指定は、それぞれ該当する文字で置き換えられます。次の表を参照してください。

指定子 意味
%a 曜日の省略名。
%A 曜日のフルネーム。
%b 月の省略名。
%B 月のフルネーム。
%c ロケールの形式の日付/時刻。
%C 世紀数 [00-99] (100 で除算し、整数に切り捨てた年)。
%d 日 [01-31]。
%D 日付形式で、%m/%d/%y と同じ。
%e 1 桁の場合は前にスペースが入ることを除き、 %d と同じ [1-31]。
%g ISO 日付の 2 桁の年の部分 [00,99]。
%G ISO 日付の 4 桁の年の部分。負になる 場合があります。
%h %b と同じ。
%H 24 時間形式の時間 [00-23]。
%I 12 時間形式の時間 [01-12]。
%j ユリウス日付 [001-366]。
%m 月 [01-12]。
%M 分 [00-59]。
%n 改行文字
%p AM または PM ストリング。
%r ロケールの AM/PM 形式の時刻。ロケールの時刻形式で 使用できない場合、POSIX 時刻 AM/PM 形式である %I:%M:%S %p をデフォルトとします。
%R 秒を含まない 24 時間の時刻形式で、 %H:%M と同じ。
%S 秒 [00-61]。秒の範囲は、うるう秒および 二重うるう秒を考慮に入れています。
%t タブ文字。
%T 秒を含む 24 時間の時刻形式で、 %H:%M:%S と同じ。
%u 曜日 [1,7]。月曜が 1 で、日曜が 7。
%U 1 年の週数 [00-53]。日曜が週の初日。
%V 1 年の ISO 週数 [01-53]。月曜が週の初日。1 月 1 日の週に新年の 4 日以上が含まれる場合、 この週は週 1 と考慮されます。そうでない場合、この週は前年の最終週となり、 次の週が新年の週 1 となります。
%w 曜日 [0,6] で、日曜が 0。
%W 1 年の週数 [00-53]。月曜が週の初日。
%x ロケールの形式の日付。
%X ロケールの形式の時刻。
%y 2 桁の年 [00,99]。
%Y 4 桁の年。負になる 場合があります。
%z UTC オフセット。出力は、+HHMM または -HHMM の形式のストリングで、+ は GMT の東、- は GMT の西、HH は GMT からの時間数、MM は GMT からの分数をそれぞれ 表します。
%Z 時間帯名。
%% % 文字。

変更された変換指定子

いくつかの変換指定子は、E または O 修飾子文字により変更可能です。 この変更を行うことで、通常使用されている未変更変換指定子の変わりに、代替の形式や指定方法 が使用されるべきであることを示すことができます。 変換された変換指定子が 現行ロケールで使用不可になっているフィールドを使用する場合、 振る舞いは未変更変換指定が使用されたかのようになります。 例えば、era ストリングが空ストリング "" (ストリングは使用不可であることを意味します) である場合、%EY が %Y のように振る舞います。

指定子 意味
%Ec 現在の時代の日付/時刻。
%EC 年代名。
%Ex 現在の時代の日付。
%EX 現在の時代の時刻。
%Ey 年代の年。これは基本の年からのオフセットです。
%EY 現在の時代の年。
%Od 代替数字を使用した日。
%Oe %Od と同じ。
%OH 代替数字を使用した 24 時間形式の時間。
%OI 代替数字を使用した 12 時間形式の時間。
%Om 代替数字を使用した月。
%OM 代替数字を使用した分。
%OS 代替数字を使用した秒。
%Ou 代替数字を使用した曜日。月曜が 1 で、日曜が 7。
%OU 代替数字を使用した 1 年の週数。 日曜が週の初日。
%OV 代替数字を使用した 1 年の ISO 週数。 ISO 週数の説明については、%V を参照してください。
%Ow 代替数字を使用した曜日。日曜が 0。
%OW 代替数字を使用した 1 年の週数。 月曜が週の初日。
%Oy 代替数字を使用した 2 桁の年。
%OZ 時間帯名が現行ロケールに存在する場合、これは %Z と同じです。存在しない場合、現行ジョブの 省略された時間帯名が戻されます。

注:
%C、%D、%e、%h、%n、%r、%R、%t、%T、%u、%V、 および変更された変換指定子は、コンパイル・コマンドで LOCALETYPE(*CLD) が指定されている場合は使用できません。

戻り値

終了ヌル・バイトを含む結果バイトの合計数が maxsize を超えない場合、strftime() は、終了ヌル・バイトを含まない、 s が指す配列に配置されたバイト数を戻します。 それ以外の場合は、0 が戻され、配列の内容は 不確定となります。

変換エラーが発生した場合、errnoECONVERT に設定される可能性があります。

strftime() の使用例

#include <stdio.h>
#include <time.h>
 
int main(void)
{
     char s[100];
     int rc;
     time_t temp;
     struct tm *timeptr;

     temp = time(NULL);
     timeptr = localtime(&temp);

     rc = strftime(s,sizeof(s),"Today is %A, %b %d.¥nTime:  %r", timeptr);
     printf("%d characters written.¥n%s¥n",rc,s);

     return 0;
}

/*************************************************
     The output should be similar to:
     46 characters written
     Today is Wednesday, Oct 24.
     Time:  01:01:15 PM
************************************************************/

関連情報



[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]