:: 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) |
Copyright (C) 2005-2007 Noto Watabe. All rights reserved.
e-mail:wmh@always-pg.com