C言語の標準関数を目的別に調べることができる辞典

ホーム > C 標準関数逆引き辞典 > 日付・時刻 > 日時を書式化した文字列を作成する

C 標準関数逆引き辞典

:: reverse dictionary ::

日付・時刻

※ソースファイルについて


日時を書式化した文字列を作成する

日時を書式化した文字列を作成するには、strftime 関数を使います。

≪宣言≫

#include <time.h>

/* 定数 */
#define STR_MAX  256  /* 文字列の最大長 */
struct tm *ti;          /* 時間情報 */
time_t now;             /* 現在までの経過時間 */
char strdate[STR_MAX];  /* 日付 */
char strtime[STR_MAX];  /* 時刻 */

/* 現在の日時を取得 */
time(&now);
ti = localtime(&now);

/* 日時を書式化 */
strftime(strdate, STR_MAX, "%Y年%m月%d日", ti);
strftime(strtime, STR_MAX, "%H時%M分%S秒", ti);

ソースファイル

現在が「2005年4月1日 6時54分32秒」になっていた場合、strdate"2005年04月01日"strtime"06時54分32秒" になります。


ワイド文字列の場合は、wcsftime 関数を使います。

≪宣言≫

#include <locale.h>
#include <time.h>

/* 定数 */
#define STR_MAX  256  /* 文字列の最大長 */
struct tm *ti;             /* 時間情報 */
time_t now;                /* 現在までの経過時間 */
wchar_t strdate[STR_MAX];  /* 日付 */
wchar_t strtime[STR_MAX];  /* 時刻 */

setlocale(LC_ALL, "ja");  /* ロケールを日本語に設定 */

/* 現在の日時を取得 */
time(&now);
ti = localtime(&now);

/* 日時を書式化 */
wcsftime(strdate, STR_MAX, L"%Y年%m月%d日", ti);
wcsftime(strtime, STR_MAX, L"%H時%M分%S秒", ti);

ソースファイル

現在が「2005年4月1日 6時54分32秒」になっていた場合、strdate"2005年04月01日"strtime"06時54分32秒" になります。

▼ 関数

size_t strftime(char *s, size_t sz,
                const char *f, const struct tm *ti)
size_t wcsftime(wchar_t *s, size_t sz,
                const wchar_t *f, const struct tm *ti)

時間情報 ti を書式 f に従って書式化します。

書式化した文字列は、s に格納されます。
sz には s のサイズを指定します。

書式化に成功した場合、strftime は書式化したバイト数、wcsftime は書式化した文字数を返します。

書式化に失敗した場合は 0 を返します。
(書式化した文字列が s に収まらない場合)

●引数

s … 書式化した文字列を格納する文字列バッファ
sz … 文字列 s のサイズ
f … 書式
ti … 時間情報のポインタ

●戻り値

・書式化に成功 … strftime はそのバイト数、wcsftime はその文字数
・書式化に失敗 … 0


書式 f には、%Y%H などのパラメータを指定できます。
それぞれのパラメータは、対応する数値や文字列に置き換えられます。

置き換わる値は、ロケールによって変わります。

ロケールを設定しない場合のパラメータと値の対応は、次のとおりです。

パラメータ 置き換わる値
%a 曜日の省略形 Mon 〜 Sun
%A 曜日の完全形 Monday 〜 Sunday
%b 月の省略形 Jan 〜 Dec
%B 月の完全形 January 〜 December
%c 日付と時刻
月/日/年 時:分:秒
例: 04/01/05 06:54:32
%d 01 〜 31
%H 時(24時間 00 〜 23
%I 時(12時間 00 〜 11
%j 経過日数
1月1日から)
001 〜 366
%m 01 〜 12
%M 00 〜 59
%p 午前/午後 AM または PM
%S 00 〜 59
%U 週の通し番号
(週の最初が日曜日)
00 〜 53
%w 曜日 0 〜 6(日曜日が 0)
%W 週の通し番号
(週の最初が月曜日)
00 〜 53
%x 日付
月/日/年
例: 04/01/05
%X 時刻
時:分:秒
例: 06:54:32
%y 年(下2桁) 00 〜 99
%Y 年(4桁) 0000 〜 9999
%z 時間帯の名前
(環境に依存)
例: 東京(標準時)
%% パーセント記号 %

ロケールを日本語("ja")に設定した場合のパラメータと値の対応は、次のとおりです。

パラメータ 置き換わる値
%a 曜日の省略形 月 〜 日
%A 曜日の完全形 月曜日 〜 日曜日
%b 月の省略形 1 〜 12
%B 月の完全形 1月 〜 12月
%c 日付と時刻
年/月/日 時:分:秒
例: 2005/04/01 06:54:32
%d 01 〜 31
%H 時(24時間 00 〜 23
%I 時(12時間 00 〜 11
%j 経過日数
1月1日から)
001 〜 366
%m 01 〜 12
%M 00 〜 59
%p 午前/午後 午前 または 午後
%S 00 〜 59
%U 週の通し番号
(週の最初が日曜日)
00 〜 53
%w 曜日 0 〜 6(日曜日が 0)
%W 週の通し番号
(週の最初が月曜日)
00 〜 53
%x 日付
年/月/日
例: 2005/04/01
%X 時刻
時:分:秒
例: 06:54:32
%y 年(下2桁) 00 〜 99
%Y 年(4桁) 0000 〜 9999
%z 時間帯の名前
(環境に依存)
例: 東京(標準時)
%% パーセント記号 %

なお、%c%x# を付加すると、日付が長い表記になります。

[ %#c ]
ロケール未設定: Friday, April 01, 2005 06:54:32
ロケール "ja" : 2005年04月01日 06:54:32
[ %#x ]
ロケール未設定: Friday, April 01, 2005
ロケール "ja" : 2005年04月01日

また、%m%d などの2桁以上の数値パラメータに # を付加すると、先頭の 0 を削除します。

struct tm *ti;          /* 時間情報 */
time_t now;             /* 現在までの経過時間 */
char strdate[STR_MAX];  /* 日付 */
char strtime[STR_MAX];  /* 時刻 */

/* 現在の日時を取得 */
time(&now);
ti = localtime(&now);

/* 日時を書式化 */
strftime(strdate, STR_MAX, "%Y年%#m月%#d日", ti);
strftime(strtime, STR_MAX, "%#H時%#M分%#S秒", ti);

ソースファイル

現在が「2005年4月1日 9時8分7秒」になっていた場合、strdate"2005年4月1日"strtime"9時8分7秒" になります。

●補足

tm 構造体に設定できる各時間の値は、次のとおりです。
(メンバ変数は、全て int 型)

メンバ変数 内容
tm_hour 0 〜 23
tm_isdst 夏時間フラグ 1以上:有効、0:無効、-1以下:不明
tm_mday 1 〜 31
tm_min 0 〜 59
tm_mon 0 〜 11(1月が 0)
tm_sec 0 〜 59
tm_wday 曜日 0 〜 6(日曜日が 0)
tm_yday 経過日数 0 〜 365(1月1日が 0)
tm_year 年 - 1900(2000年が 100)

注目キーワード ベスト5

  1. セキュリティ
  2. ホスティング
  3. レンタルサーバ
  4. ファイル復旧
  5. ハードディスク修復

日付・時刻 - date & time -


ホーム > C 標準関数逆引き辞典 > 日付・時刻 > 日時を書式化した文字列を作成する

Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com