C言語編 標準ライブラリのリファレンス strftime

先頭へ戻る

strftime

概要 現在のロケールに応じた日時と時刻を表す文字列を返す。
ヘッダ time.h
形式 size_t strftime(char* s, size_t maxsize, const char* format, const struct tm* t);
引数 s 結果を格納する配列へのポインタ。
maxsize 結果の文字列の最大長。末尾のヌル文字を含む。
format フォーマット指定文字列。
t 日付・時刻の情報が格納された tm構造体へのポインタ。
戻り値 結果の文字列が maxsize 以下であれば、s が指す配列へ実際に書き込まれた文字数(ヌル文字の分を除く)を返す。そうでなければ、0 を返す。
詳細 引数t が指す tm構造体のメンバの値を使って、現在のロケールの LC_TIMEカテゴリに応じた、日付・時刻の文字列を生成する。
引数format は、「%」で始まる文字の並びによって変換指令を与える。通常は、「%」と、それに続く1文字の変換指令文字の組み合わせである。変換指令と無関係な文字はそのままコピーされる。
変換指令文字は、以下のものがある。
変換指令文字 参照するメンバ 意味
a tm_wday 曜日名の短縮形式
A tm_wday 曜日名
b tm_mon 月名の短縮形式
B tm_mon 月名
c いずれか 日付と時刻
C (C99) tm_year 西暦年の下2桁
d tm_mday
D (C99) tm_mon、tm_mday、tm_year "%m/%d/%y" と同じ
e tm_mday 日。1桁の場合、手前に空白文字を付加。
F tm_mon、tm_mday、tm_year "%Y-%m-%d" と同じ
g tm_year、tm_wday、tm_yday 週基準年の下2桁
G tm_year、tm_wday、tm_yday 週基準年
h tm_mon "%b" と同じ
H tm_hour 24時間表記での「時」
I tm_hour 12時間表記での「時」
j tm_yday 年の初めからの通年日
m tm_mon
M tm_min
n (C99) なし 改行
P tm_hour 午前・午後の区別を表す表現
r (C99) tm_hour、tm_min、tm_sec 12時間表記による時・分・秒の表現
R (C99) tm_hour、tm_min "%H:%M" と同じ
S tm_sec
t (C99) なし 水平タブ
T (C99) tm_hour、tm_min、tm_sec "%H:%M:%S" と同じ
u (C99) tm_wday 曜日を数値で表したもの (基準は月曜日で 1)
U tm_year、tm_wday、tm_yday その年の何週目か。
最初の日曜日を 1週目とし、年初めの日曜日が現れるより前の日は 0 になる。
V (C99) tm_year、tm_wday、tm_yday その年の何週目か。
最初の月曜日を 1週目とし、年初めの月曜日が現れるより前の日は、前年の最終週に含むと考える。 そのため、「U」や「W」と違い、0 にはなり得ない。
w tm_wday 曜日を数値で表したもの (基準は日曜日で 0)
W tm_year、tm_wday、tm_yday その年の何週目か。
最初の月曜日を 1週目とし、年初めの月曜日が現れるより前の日は 0 になる。
x いずれか 日付(年・月・日)の表現
X いずれか 時刻(時・分・秒)の表現
y tm_year 西暦年の下2桁
Y tm_year 西暦年
z (C99) tm_isdst UTC (協定世界時) からの時差。
例えば、「-330」は 3時間30分遅れていることを表す。 時間帯が不明なときは "" になる。
Z tm_isdst 時間帯名。
時間帯が不明なときは "" になる。
% なし %
表の中で登場する「週基準年」とは、ISO 8601 で規定されている定義で、 週の始まりを月曜日とし、1月4日を含んでいる週を、その年の第1週と考える。
「%」と変換指令文字の間に、「E」または「O」を挟み込むことで、代替形式を指定できる。これは、ロケールに依存するが、代替形式がないこともある。ない場合は、単に「E」「O」を無視して、通常の変換を行う。例えば、"C"ロケールには代替形式がない。
注意
使用例
#include <stdio.h>
#include <locale.h>
#include <time.h>

int main(void)
{
    time_t now;
    struct tm* t;
    char str[256];

    now = time( NULL );
    t = localtime( &now );

    puts( setlocale( LC_TIME, "ja-JP" ) );
    strftime( str, sizeof(str), "%x %X", t );
    puts( str );

    puts( setlocale( LC_TIME, "en-US" ) );
    strftime( str, sizeof(str), "%x %X", t );
    puts( str );

    return 0;
}

実行結果:

ja-JP
2017/05/23 11:56:41
en-US
5/23/2017 11:56:41 AM
関連 ワイド文字列版の wcsftime関数がある。
解説章


参考リンク



更新履歴

'2018/4/22 解説中で C95 を(C89 に対して)特別扱いしないように修正。そもそもC言語編は C95ベースなので、余計な説明は省く。

'2018/4/17 全体的に文章を見直し修正。

'2018/1/22 新規作成。



標準ライブラリのリファレンス(名前順)のトップページへ

標準ライブラリのリファレンス(ヘッダ別)のトップページへ

C言語編のトップページへ

Programming Place Plus のトップページへ


はてなブックマーク Pocket に保存 Twitter でツイート Twitter をフォロー
Facebook でシェア Google+ で共有 LINE で送る rss1.0 取得ボタン RSS
管理者情報 プライバシーポリシー