 |
≫ |
|
|
 |
名称strftime() ― 日付および時間の文字列への変換 構文#include <time.h> size_t strftime( char *s, size_t maxsize, const char *format, const struct tm *timeptr ); 説明strftime() 関数は、 tm 構造体
(ctime(3C) を参照) を形式化された日付と時間の文字列に変換します。 strftime() は、 format が指す文字列によって制御されて、 文字を s が指す配列に格納します。 format 文字列は、もし必要ならいくつかの指令と 一般の文字から構成されます。
指令は、 % 文字、オプションの領域幅と精度の指定、
および指令の動作を決める終端の文字から構成されます。 すべての文字
(終端にある null 文字も含む) は、変更されずに配列にコピーされます。 maxsize の文字数以下しか配列に格納されません。 それぞれの指令は、以下のリストで述べられている個々の文字によって置換されます。
これらの文字は、プログラムのローカル、 timeptr が指す構造体中にある値、および TZ 環境変数
(後述の多言語化対応を参照) によって決められます。 指令オプションの領域幅と精度の指定をせずに示された以下の指令は、指定された文字によって置換されます。 | %a | | ロケールの省略形の曜日名 | | %A | | ロケールの完全な曜日名 | | %b | | ロケールの省略形の月名 | | %B | | ロケールの完全な月名 | | %c | | ロケール特定の日時表示 | | %C | | 10 進数表記による世紀表示 (西暦の年数を 100 で割ったものを、整数になるよう切り捨てた値)[00-99] | | %d | | 月の日付 (10 進数表記)[01,31] | | %D | | 指令文字列 %m/%d/%y と同じ | | %e | | 月の日付 (10 進数表記) [1,31]。1 桁の場合は、前にスペースが挿入されます。 | | %h | | %b と同じ。 | | %H | | 時間 (24 時間表示で 10 進数表記) [00,23] | | %I | | 時間 (12 時間表示で 10 進数表記) [01,12] | | %j | | 1 年の日数 (10 進数表記) [001,366] | | %m | | 月 (10 進数表記) [01,12] | | %M | | 分 (10 進数表記) [00,59] | | %n | | ニューライン文字 | | %p | | ロケールの AM または PM | | %r | | AM および PM 表記による時刻の表示。POSIX のロケールでは、%I:%M:%S %p に相当します。 | | %R | | 24 時間形式による時刻の表示 (%H:%M) | | %S | | 秒 (10 進数表記)[00,61] | | %t | | タブ文字 | | %T | | 時間、分、秒形式による時刻の表示 (%H:%M:%S) | | %u | | 10 進数による曜日の表示 [1(月曜日),7] | | %U | | 1 年の週数 (10 進数表記) [00,53]。週の最初は日曜日になります。
新年の最初の日曜日より前の日は、第 0 週とみなします。 | | %V | | 10 進数 [01,53] で表された 1 年の週数 (週の最初は月曜日になります)。
1 月 1 日が含まれる週に、新年になってからの日数が 4 日以上ある場合、第 1 週とみなします。それ以外の場合、その週は前年の最後の週とみなされ、翌週が第 1 週となります。 | | %w | | 1 週間の曜日数 (10 進数表記) [0 (日曜),6] | | %W | | 1 年の週数 (10 進数表記) [00,53]。週の最初は月曜日になります。
新年の最初の月曜日より前の日は、第 0 週とみなします。 | | %x | | ロケール特定の日付表示 | | %X | | ロケール特定の時間表示 | | %y | | 年号の下 2 桁 (10 進数表記) [00,99] | | %Y | | 年号 (10 進数表記) | | %Z | | 時間帯名 (または、時間帯がない場合は何も表示しない) | | %% | | パーセント (%) 記号 |
以下の指令は、 date(1) および ctime(3C) 関数がサポートしている指令に対して旧製品との互換性があります。
これらの指令は、将来リリースされる製品では使えなくなる可能性があります。
下記の指令よりもむしろ上記の指令を使うことをお勧めします。 | %E | | ロケールの皇帝/時代の名前と年代 (代わりに %EC%Ey を使ってください) | | %F | | ロケールの完全な月名 (代わりに %B を使ってください) | | %N | | ロケールの皇帝/時代の名前 (代わりに %EC を使ってください) | | %o | | ロケールの皇帝/時代の年代 (代わりに %Ey を使ってください) | | %z | | 時間帯名 (または、時間帯がない場合何も表示しない)
(代わりに %Z を使ってください) |
指令が上記の中にない場合、その動作は定義されません。 修飾された変換指定子変換指定子の中には、E または O 修飾子で修飾し、修飾されていない変換指定子が通常使うものとは異なる代替フォーマットまたは指定方法を使わなければならないことを示す場合があります。現在のロケールに対する代替フォーマットまたは指定方法が存在しない場合は、修飾されていない変換指定子が使われた場合と同様に動作します。代替数値シンボルは、ロケールの ALT_DIGIT langinfo(5) を参照) で定義されたシンボルを参照します。 | %Ec | | ロケールの、適切な代替日時表示 | | %EC | | ロケールの代替表示における、基本となる年数の表示方法
(皇帝/時代) | | %Ex | | ロケールの代替日付表示 | | %EX | | ロケールの代替時刻表示 | | %Ey | | ロケールの代替表示と %EC (年数のみの表示) との差 | | %EY | | 完全な、代替年数表示 | | %Od | | 月の日付。ロケールの代替数値シンボルを使い、ゼロに相当する代替シンボルがある場合は、必要に応じて前にゼロが挿入されます。それ以外の場合は、前にスペースが挿入されます。 | | %Oe | | 月の日付。ロケールの代替数値シンボルを使い、必要に応じて前にスペースが挿入されます。 | | %OH | | ロケールの代替数値シンボルを使った時間表示 (24 時間形式) | | %OI | | ロケールの代替数値シンボルを使った時間表示 (12 時間形式) | | %Om | | ロケールの代替数値シンボルを使った月の表示 | | %OM | | ロケールの代替数値シンボルを使った分の表示 | | %OS | | ロケールの代替数値シンボルを使った秒の表示 | | %Ou | | ロケールの代替表示における、数値による週の表示 (月曜日 =1) | | %OU | | ロケールの代替数値シンボルを使った 1 年の週数 (週の最初は日曜日で、%U
に準拠します) | | %OV | | ロケールの代替数値シンボルを使った 1 年の週数 (週の最初は月曜日で、%V
に準拠します) | | %Ow | | ロケールの代替数値シンボルを使った曜日 (日曜日 =0) | | %OW | | ロケールの代替数値シンボルを使った 1 年の週数 (週の最初は月曜日になります) | | %Oy | | ロケールの代替表示における、ロケールの代替シンボルを使った年の表示
(%C との差) |
領域幅と精度オプションの領域幅と精度の指定は、指令の先頭の % のすぐ後に以下の順序で続けることができます。 | [-|0]w | | 10 進数の文字列
w は、変換の結果を右揃えまたは左揃えとしたときの最小領域幅を指定します。
デフォルトでは右揃えが (空白の詰込みとともに) 行われます。 オプションのフラグ - を指定すると、右側に空白を詰め込んで左揃えとなります。
オプションのフラグ 0 を指定すると、右揃えとなり左側に 0 を詰め込みます。 | | .p | | 10 進数の文字列 p は、 d, H, I, j, m, M, o, S, U, w, W, y および Y 指令に現れる桁の最小値を指定し、 a, A, b, B, c, D, E, F, h, n, N, p, r, t, T, x, X, z, Z,
および % 指令に使われる最大文字数を指定します。
前者の場合、指令が精度で指定したよりも少ない桁数を指定したときは、0 が先頭に加えられ桁が増やされます。
後者の場合、指令が精度で指定したよりも多い文字数を指定したときは、超過した文字は右側から削除されます。 |
d, H, I, m, M, S, U, W, y,
または j 指令に対して、領域幅あるいは精度が指定されていない場合、 .3 が使われている j 以外のすべてに対して .2 が使われます。 多言語化対応ロケールLC_TIME カテゴリは、上述の指令の代わりに使われる文字をローカルのものとして決定します。 LC_CTYPE カテゴリは、 format 内のバイトの解釈を半角文字または全角文字あるいはその両方として決定します。 LC_NUMERIC カテゴリは、数字を出力する指令に対して、数字の生成に使う文字を決定します。 ALT_DIGITS (langinfo(5) を参照) がローカルで定義されている場合、そのように指定した文字はデフォルトの
ASCII 形式の文字の代わりに使われます。 ALT_DIGITS および ALT_DIGIT が、どちらもロケール用に定義されている場合、ALT_DIGITS の定義が ALT_DIGIT よりも優先されます。 環境変数TZ は、 %Z および %z 指令の代わりに時間帯名を決定します。
外部変数 tzname (ctime(3C) を参照)
を設定する関数 tzset() を呼び出すことで、時間帯名が決まります。 サポートされるコードセットシングル/マルチバイトの文字コードセットがサポートされています。 戻り値終端にある null 文字を含む結果の文字総数が maxsize を超えていない場合、 strftime() は s が指す配列に格納される文字数を返します。 ただし、その時終端にある
null 文字は含みません。 それ以外の場合、0 が返され配列の内容は決定されません。 例timeptr 引き数が以下の値を含むとき、 timeptr->tm_sec = 4; timeptr->tm_min = 9; timeptr->tm_hour = 15; timeptr->tm_mday = 4; timeptr->tm_mon = 6; timeptr->tm_year = 88; timeptr->tm_wday = 1; timeptr->tm_yday = 185; timeptr->tm_isdst = 1; LC_TIME カテゴリと文字列形式との以下の組合せによって以下に示す出力が得られます。 | LC_TIME | 文字列形式 | 出力 |
|---|
| en_US.roman8 | %x | Mon, Jul 4, 1988 | | de_De.roman8 | %x | Mo., 4. Juli 1988 | | en_US.roman8 | %X | 03:09:04 PM | | fr_FR.roman8 | %X | 15h09 04 | | any* | %H:%M:%S | 15:09:04 | | any* | %.1H:%.1M:%.1S | 15:9:4 | | any* | %2.1H:%-3M:%03.1S | 15:9 :004 |
* これらの例で使う指令は、ローカルの LC_TIME カテゴリの影響を受けません。 警告引き数 s と引き数 format の両方が重複するように定義されていると、その動作は定義されません。 関数 tzset() は strftime() を呼び出すごと
(時間帯名が出力配列にコピーされているかどうか調べるため) に呼び出されます。 %S ([0,61]) に対する数値の範囲は、時折起こる
1,2 秒のうるう秒を考慮して 61 まで拡張してあります。 しかしながら、このシステムはうるう秒を加算しません。また、関数 localtime() および gmtime() (ctime(3C) を参照) によって生成された tm 構造体は、うるう秒をまったく考慮に入れません。 timeptr が指す構造体にある値が tm 構造体
(ctime(3C) を参照) に定義した範囲を超えている場合、あるいはその値が存在しない場合
(たとえば、 tm_yday 要素が 1 月の最初の日を表す 0 に設定され、 tm_mon 要素が
12 月の日付を表す 11 に設定されているような場合)、 結果は定義されません。 著者strftime() は、HP で開発されました。 標準準拠strftime(): AES, SVID3, XPG3, XPG4, FIPS
151-2, POSIX.1, ANSI C
|