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」の指定は無視される。


変換指令文字 参照するメンバ 意味
Ec いずれか 現在のロケールでの日付と時刻の表現
EC tm_year 現在のロケールでの基準年(期間)の表現
Ex いずれか 現在のロケールでの日付(年・月・日)の表現
EX いずれか 現在のロケールでの時刻(時・分・秒)の表現
Ey tm_year %EC で表現される年からのオフセット
EY tm_year 現在のロケールでの年の完全な表現
(C23) Ob tm_mon 現在のロケールでの月名の短縮形式の表現
(C23) OB tm_mon 現在のロケールでの月名の表現
Od tm_mday 現在のロケールでの日の表現。必要に応じて先頭に 0 あるいはその代替表現が付加される
Oe tm_mday 現在のロケールでの日の表現。必要に応じて先頭に空白文字が付加される
OH tm_hour 現在のロケールでの 24時間表記での「時」の表現
OI tm_hour 現在のロケールでの 12時間表記での「時」の表現
Om tm_mon 現在のロケールでの 月の表現
OM tm_min 現在のロケールでの 分の表現
OS tm_sec 現在のロケールでの 秒の表現
Ou tm_wday 現在のロケールで、曜日を数値で表したもの(基準は月曜日で 1)
OU tm_year、tm_wday、tm_yday 現在のロケールで、その年の何週目かを表したもの。
最初の日曜日を 1週目とし、年初めの日 曜日が現れるより前の日は 0 になる。
OV tm_year、tm_wday、tm_yday 現在のロケールで、その年の何週目かを表したもの。
最初の月曜日を 1週目とし、年初めの月曜日が現れるより前の日は、前年の最終週に含むと考える。 そのため、「OU」や「OW」と違い、0 にはなり得ない。
Ow tm_wday 現在のロケールで、曜日を数値で表したもの (基準は日曜日で 0)
OW tm_year、tm_wday、tm_yday 現在のロケールで、その年の何週目かを表したもの。
最初の月曜日を 1週目とし、年初めの月 曜日が現れるより前の日は 0 になる。
Oy tm_year 現在のロケールで、西暦年の下2桁を表したもの
注意
使用例
#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), "%%a --> %a", t); puts(str);
    strftime(str, sizeof(str), "%%A --> %A", t); puts(str);
    strftime(str, sizeof(str), "%%b --> %b", t); puts(str);
    strftime(str, sizeof(str), "%%B --> %B", t); puts(str);
    strftime(str, sizeof(str), "%%c --> %c", t); puts(str);
    strftime(str, sizeof(str), "%%C --> %C", t); puts(str);
    strftime(str, sizeof(str), "%%d --> %d", t); puts(str);
    strftime(str, sizeof(str), "%%D --> %D", t); puts(str);
    strftime(str, sizeof(str), "%%e --> %e", t); puts(str);
    strftime(str, sizeof(str), "%%F --> %F", t); puts(str);
    strftime(str, sizeof(str), "%%g --> %g", t); puts(str);
    strftime(str, sizeof(str), "%%G --> %G", t); puts(str);
    strftime(str, sizeof(str), "%%h --> %h", t); puts(str);
    strftime(str, sizeof(str), "%%H --> %H", t); puts(str);
    strftime(str, sizeof(str), "%%I --> %I", t); puts(str);
    strftime(str, sizeof(str), "%%j --> %j", t); puts(str);
    strftime(str, sizeof(str), "%%m --> %m", t); puts(str);
    strftime(str, sizeof(str), "%%M --> %M", t); puts(str);
    strftime(str, sizeof(str), "%%p --> %p", t); puts(str);
    strftime(str, sizeof(str), "%%r --> %r", t); puts(str);
    strftime(str, sizeof(str), "%%R --> %R", t); puts(str);
    strftime(str, sizeof(str), "%%S --> %S", t); puts(str);
    strftime(str, sizeof(str), "%%T --> %T", t); puts(str);
    strftime(str, sizeof(str), "%%u --> %u", t); puts(str);
    strftime(str, sizeof(str), "%%U --> %U", t); puts(str);
    strftime(str, sizeof(str), "%%V --> %V", t); puts(str);
    strftime(str, sizeof(str), "%%w --> %w", t); puts(str);
    strftime(str, sizeof(str), "%%W --> %W", t); puts(str);
    strftime(str, sizeof(str), "%%x --> %x", t); puts(str);
    strftime(str, sizeof(str), "%%X --> %X", t); puts(str);
    strftime(str, sizeof(str), "%%y --> %y", t); puts(str);
    strftime(str, sizeof(str), "%%Y --> %Y", t); puts(str);
    strftime(str, sizeof(str), "%%z --> %z", t); puts(str);
    strftime(str, sizeof(str), "%%Z --> %Z", t); puts(str);
    strftime(str, sizeof(str), "%%Ec --> %Ec", t); puts(str);
    strftime(str, sizeof(str), "%%EC --> %EC", t); puts(str);
    strftime(str, sizeof(str), "%%Ex --> %Ex", t); puts(str);
    strftime(str, sizeof(str), "%%EX --> %EX", t); puts(str);
    strftime(str, sizeof(str), "%%Ey --> %Ey", t); puts(str);
    strftime(str, sizeof(str), "%%EY --> %EY", t); puts(str);
    strftime(str, sizeof(str), "%%Ob --> %Ob", t); puts(str);
    strftime(str, sizeof(str), "%%OB --> %OB", t); puts(str);
    strftime(str, sizeof(str), "%%Od --> %Od", t); puts(str);
    strftime(str, sizeof(str), "%%Oe --> %Oe", t); puts(str);
    strftime(str, sizeof(str), "%%OH --> %OH", t); puts(str);
    strftime(str, sizeof(str), "%%OI --> %OI", t); puts(str);
    strftime(str, sizeof(str), "%%Om --> %Om", t); puts(str);
    strftime(str, sizeof(str), "%%OM --> %OM", t); puts(str);
    strftime(str, sizeof(str), "%%OS --> %OS", t); puts(str);
    strftime(str, sizeof(str), "%%Ou --> %Ou", t); puts(str);
    strftime(str, sizeof(str), "%%OU --> %OU", t); puts(str);
    strftime(str, sizeof(str), "%%OV --> %OV", t); puts(str);
    strftime(str, sizeof(str), "%%Ow --> %Ow", t); puts(str);
    strftime(str, sizeof(str), "%%OW --> %OW", t); puts(str);
    strftime(str, sizeof(str), "%%Oy --> %Oy", t); puts(str);
    puts("");

    puts(setlocale(LC_TIME, "en-US"));
    strftime(str, sizeof(str), "%%a --> %a", t); puts(str);
    strftime(str, sizeof(str), "%%A --> %A", t); puts(str);
    strftime(str, sizeof(str), "%%b --> %b", t); puts(str);
    strftime(str, sizeof(str), "%%B --> %B", t); puts(str);
    strftime(str, sizeof(str), "%%c --> %c", t); puts(str);
    strftime(str, sizeof(str), "%%C --> %C", t); puts(str);
    strftime(str, sizeof(str), "%%d --> %d", t); puts(str);
    strftime(str, sizeof(str), "%%D --> %D", t); puts(str);
    strftime(str, sizeof(str), "%%e --> %e", t); puts(str);
    strftime(str, sizeof(str), "%%F --> %F", t); puts(str);
    strftime(str, sizeof(str), "%%g --> %g", t); puts(str);
    strftime(str, sizeof(str), "%%G --> %G", t); puts(str);
    strftime(str, sizeof(str), "%%h --> %h", t); puts(str);
    strftime(str, sizeof(str), "%%H --> %H", t); puts(str);
    strftime(str, sizeof(str), "%%I --> %I", t); puts(str);
    strftime(str, sizeof(str), "%%j --> %j", t); puts(str);
    strftime(str, sizeof(str), "%%m --> %m", t); puts(str);
    strftime(str, sizeof(str), "%%M --> %M", t); puts(str);
    strftime(str, sizeof(str), "%%p --> %p", t); puts(str);
    strftime(str, sizeof(str), "%%r --> %r", t); puts(str);
    strftime(str, sizeof(str), "%%R --> %R", t); puts(str);
    strftime(str, sizeof(str), "%%S --> %S", t); puts(str);
    strftime(str, sizeof(str), "%%T --> %T", t); puts(str);
    strftime(str, sizeof(str), "%%u --> %u", t); puts(str);
    strftime(str, sizeof(str), "%%U --> %U", t); puts(str);
    strftime(str, sizeof(str), "%%V --> %V", t); puts(str);
    strftime(str, sizeof(str), "%%w --> %w", t); puts(str);
    strftime(str, sizeof(str), "%%W --> %W", t); puts(str);
    strftime(str, sizeof(str), "%%x --> %x", t); puts(str);
    strftime(str, sizeof(str), "%%X --> %X", t); puts(str);
    strftime(str, sizeof(str), "%%y --> %y", t); puts(str);
    strftime(str, sizeof(str), "%%Y --> %Y", t); puts(str);
    strftime(str, sizeof(str), "%%z --> %z", t); puts(str);
    strftime(str, sizeof(str), "%%Z --> %Z", t); puts(str);
    strftime(str, sizeof(str), "%%Ec --> %Ec", t); puts(str);
    strftime(str, sizeof(str), "%%EC --> %EC", t); puts(str);
    strftime(str, sizeof(str), "%%Ex --> %Ex", t); puts(str);
    strftime(str, sizeof(str), "%%EX --> %EX", t); puts(str);
    strftime(str, sizeof(str), "%%Ey --> %Ey", t); puts(str);
    strftime(str, sizeof(str), "%%EY --> %EY", t); puts(str);
    strftime(str, sizeof(str), "%%Ob --> %Ob", t); puts(str);
    strftime(str, sizeof(str), "%%OB --> %OB", t); puts(str);
    strftime(str, sizeof(str), "%%Od --> %Od", t); puts(str);
    strftime(str, sizeof(str), "%%Oe --> %Oe", t); puts(str);
    strftime(str, sizeof(str), "%%OH --> %OH", t); puts(str);
    strftime(str, sizeof(str), "%%OI --> %OI", t); puts(str);
    strftime(str, sizeof(str), "%%Om --> %Om", t); puts(str);
    strftime(str, sizeof(str), "%%OM --> %OM", t); puts(str);
    strftime(str, sizeof(str), "%%OS --> %OS", t); puts(str);
    strftime(str, sizeof(str), "%%Ou --> %Ou", t); puts(str);
    strftime(str, sizeof(str), "%%OU --> %OU", t); puts(str);
    strftime(str, sizeof(str), "%%OV --> %OV", t); puts(str);
    strftime(str, sizeof(str), "%%Ow --> %Ow", t); puts(str);
    strftime(str, sizeof(str), "%%OW --> %OW", t); puts(str);
    strftime(str, sizeof(str), "%%Oy --> %Oy", t); puts(str);
}

実行結果:

ja-JP
%a --> 水
%A --> 水曜日
%b --> 12
%B --> 12月
%c --> 2024/12/18 18:27:49
%C --> 20
%d --> 18
%D --> 12/18/24
%e --> 18
%F --> 2024-12-18
%g --> 24
%G --> 2024
%h --> 12
%H --> 18
%I --> 06
%j --> 353
%m --> 12
%M --> 27
%p --> 午後
%r --> 18:27:49
%R --> 18:27
%S --> 49
%T --> 18:27:49
%u --> 3
%U --> 50
%V --> 51
%w --> 3
%W --> 51
%x --> 2024/12/18
%X --> 18:27:49
%y --> 24
%Y --> 2024
%z --> +0900
%Z --> 東京 (標準時)
%Ec --> 2024/12/18 18:27:49
%EC --> 20
%Ex --> 2024/12/18
%EX --> 18:27:49
%Ey --> 24
%EY --> 2024
%Ob --> 12
%OB --> 12月
%Od --> 18
%Oe --> 18
%OH --> 18
%OI --> 06
%Om --> 12
%OM --> 27
%OS --> 49
%Ou --> 3
%OU --> 50
%OV --> 51
%Ow --> 3
%OW --> 51
%Oy --> 24

en-US
%a --> Wed
%A --> Wednesday
%b --> Dec
%B --> December
%c --> 12/18/2024 6:27:49 PM
%C --> 20
%d --> 18
%D --> 12/18/24
%e --> 18
%F --> 2024-12-18
%g --> 24
%G --> 2024
%h --> Dec
%H --> 18
%I --> 06
%j --> 353
%m --> 12
%M --> 27
%p --> PM
%r --> 6:27:49 PM
%R --> 18:27
%S --> 49
%T --> 18:27:49
%u --> 3
%U --> 50
%V --> 51
%w --> 3
%W --> 51
%x --> 12/18/2024
%X --> 6:27:49 PM
%y --> 24
%Y --> 2024
%z --> +0900
%Z --> ?? (???)
%Ec --> 12/18/2024 6:27:49 PM
%EC --> 20
%Ex --> 12/18/2024
%EX --> 6:27:49 PM
%Ey --> 24
%EY --> 2024
%Ob --> Dec
%OB --> December
%Od --> 18
%Oe --> 18
%OH --> 18
%OI --> 06
%Om --> 12
%OM --> 27
%OS --> 49
%Ou --> 3
%OU --> 50
%OV --> 51
%Ow --> 3
%OW --> 51
%Oy --> 24
関連 ワイド文字列版の wcsftime関数がある。
解説章


参考リンク 🔗

本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place 管理者に紹介料が支払われています。


更新履歴 🔗



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

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

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

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る