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

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

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


strftime

概要

現在のロケールに応じた日時と時刻を表す文字列を返す。

ヘッダ

time.h

形式

size_t strftime(char* restrict s, size_t maxsize, const char* restrict format, const struct tm* restrict 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 tm_year 西暦年の下2桁
d tm_mday
D 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 なし 改行
P tm_hour 午前・午後の区別を表す表現
r tm_hour、tm_min、tm_sec 12 時間表記による時・分・秒の表現
R tm_hour、tm_min " %H:%M" と同じ
S tm_sec
t なし 水平 タブ
T tm_hour、tm_min、tm_sec "% H:%M:%S" と同じ
u tm_wday 曜日を数値で表したもの (基準は月曜日で 1)
U tm_year、tm_wday、tm_yday その 年の何週目か。
最初の日曜日を 1週目とし、年初めの日曜日が現れるより前の日は 0 になる。
V 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 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 = time(NULL);
    struct tm* t = localtime(&now);

    char str[256];

    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);
}

実行結果:

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 に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る