トップページ > キーワード検索 > strftime()
C言語規格
C言語(その他)
プログラム
その他
strftime()
機能 詳細時刻を指定した書式で文字列に変換する。
地域(LC_TIME部門)によって結果は異なる
定義 #include <time.h>

size_t strftime (
  char * s,
  size_t maxsize,
  const char * format,
  const struct tm * timeptr
);

※C99規格では以下の定義となる
size_t strftime (
  char * restrict s,
  size_t maxsize,
  const char * restrict format,
  const struct tm * restrict timeptr
);
引数
s変換文字列の格納先
maxsize変換文字列の最大長
format変換書式文字列
変換指定は文字%から始まり以下の指定が可能である。変換指定以外の文字列は記述どおりに出力される。
※ ? や " などの文字は拡張表記文字で記述する必要がある

変換指定の書式
  % [修飾子]option 変換指定子

修飾子代替形式または代替指定を示す
修飾子意味
E(C99規格) ロケールでの代替表現に置き換える。
変換指定子がc、C、x、X、y、Yで用いることができる
O(C99規格) ロケールでの代替数値記号を使った表現に置き換える。
変換指定子がd、e、H、I、m、M、S、u、U、V、w、W、yで用いることができる
変換指定子適用する変換の種類を指定する
変換指定子意味
a曜日の名前(ロケール簡略化)
A曜日の名前
b月の名前(ロケール簡略化)
B月の名前
c日付および時刻表現
C(C99規格) 西暦の年を100で除算し整数に切り捨てた10進数(00〜99)
d月の日(01〜31)
D(C99規格) "%m/%d/%y"と等価な日付表現
e(C99規格) 月の日(1〜31)
F(C99規格) "%Y-%m-%d"と等価な日付表現(JIS X 0301の日付形式)
g(C99規格) 暦週に基づく年の下2桁(00〜99)
G(C99規格) 暦週に基づく年
h(C99規格) "%b"と等価な表現
H24時間制の時間(00〜23)
I12時間制の時間(01〜12)
j年の日(001〜366)
m月(01〜12)
M分(00〜59)
n(C99規格) 改行
p12時間制に関連した午前/午後の表記に相当する表現
r(C99規格) 12時間制での時刻表現
R(C99規格) "%H:%M"と等価な時刻表現
S秒(00〜60)
t(C99規格) 水平タブ
T(C99規格) "%H:%M:%S"に等価な時刻表現(JIS X 0301の時刻形式)
u(C99規格) 暦週の日の序数(1〜7)(JIS X 0301規定)※月曜日を1とする
U年の週の数(00〜53)※年の最初の日曜日を第1週の最初の日とする
V(C99規格) 暦週の序数(01〜53)(JIS X 0301規定)
w曜日(0〜6)※日曜日を0とする
W年の週番号(00〜53)※年の最初の月曜日を第1週の最初の日とする
xロケールの適切な日付表現
Xロケールの適切な時刻表現
y西暦の下2桁の年(00〜99)
Y西暦の年
z(C99規格) 協定世界時(UTC)からの時差(JIS X 0301の形式)
Z時間帯の名前または略名
%%文字
timeptr詳細時刻が格納されたtm構造体へのポインタ
戻り値 変換した結果の文字数を返す。
失敗した場合は 0 を返す。
実装例
#include <time.h>
#include <locale.h>
#include <stdio.h>

int main(void)
{
    time_t t;
    struct tm *tp;
    char s[256];
    size_t len;
    
    /* ロケールを日本に設定 */
    printf("locale=%s\n", setlocale(LC_TIME, "Japanese"));
    
    /* 現在の暦時刻を取得 */
    time(&t);
    printf("t=%ld\n\n", t);
    
    /* 詳細時刻に変換 */
    tp = localtime(&t);
    
    /* 文字列に変換 */
    len = strftime(s, sizeof(s),
        "%%a=%a\n"
        "%%A=%A\n"
        "%%b=%b\n"
        "%%B=%B\n"
        "%%c=%c\n"
        "%%d=%d\n"
        "%%H=%H\n"
        "%%I=%I\n"
        "%%j=%j\n"
        "%%m=%m\n"
        "%%M=%M\n"
        "%%p=%p\n"
        "%%S=%S\n"
        "%%U=%U\n"
        "%%w=%w\n"
        "%%W=%W\n"
        "%%x=%x\n"
        "%%X=%X\n"
        "%%y=%y\n"
        "%%Y=%Y\n"
        "%%Z=%Z\n"
        "%%%%=%%\n"
        ,tp
    );
    
    /* 画面に表示 */
    printf("len=%d\n", len);
    printf("%s\n", s);
    
    return 0;
}
実行結果
locale=Japanese_Japan.932
t=1399045793

len=179
%a=土
%A=土曜日
%b=5
%B=5月
%c=2014/05/03 0:49:53
%d=03
%H=00
%I=12
%j=123
%m=05
%M=49
%p=午前
%S=53
%U=17
%w=6
%W=17
%x=2014/05/03
%X=0:49:53
%y=14
%Y=2014
%Z=東京 (標準時)
%%=%






inserted by FC2 system