 |
≫ |
|
|
 |
名称wcsftime() ― 日付および時刻のワイドキャラクタ文字列への変換 構文#include <wchar.h> size_t wcsftime( wchar_t *ws, size_t maxsize, const char *format, const struct tm *timeptr ); _INCLUDE__STDC_A1_SOURCE only size_t wcsftime( wchar_t *ws, size_t maxsize, const wchar_t *format, const struct tm *timeptr ); 特記事項:これらの関数は XPG4 の Worldwide Portability Interface によるワイドキャラクタ フォーマット関数に従っています。動作は、 strftime(3C) で定義されている 8 ビット文字列フォーマット関数と同様です。 説明wcsftime() は、 tm 構造体
(ctime(3C) 参照) の内容を整形し、日付と時刻のワイドキャラクタ文字列に変換します。 wcsftime() は、 format で指令したフォーマットに従って、 ws が指す配列にワイドキャラクタを出力します。 文字列 format は、0 個以上の指令文字および通常文字からなります。
指令は、文字 % で始まり、フィールド幅および精度指定をオプションので行い、指令の内容を表す文字で終ります。
通常の文字は、終端の null 文字も含め、対応するワイドキャラクタに変換され、配列にコピーされます。
配列に出力されるワイドキャラクタは、 maxsize 文字を超えることはありません。 指令は、それぞれ以下のリストにしたがって、適切なワイドキャラクタに置き換えられます。
これが、どのようなワイドキャラクタであるかは、プログラムの locale, timeptr が指す構造体の内容、および、環境変数 TZ (後述の多言語化対応の項を参照)
で決まります。 この関数および wchar_t 型は、ヘッダーファイル <wchar.h>
で定義してあります。 _INCLUDE__STDC_A1_SOURCE
のみwcsftime() は format によって指令されたワイドキャラクタ文字列によって制御される ws によって指された配列内にワイドキャラクタを配置します。 wcsftime() の機能は format のデータタイプを除いて同じです。 指令以下にあげる指令は、それぞれ対応するワイドキャラクタで置き換えられます。これらはオプションのフィールド幅指定および精度指定なしで表示してあります。 | %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 | | 10 進数で表した [00,23] の範囲の時間 (24 時間法) | | %I | | 10 進数で表した [00,12] の範囲の時間 (12 時間法) | | %j | | 年の始めから数えた 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 進数で表された 1 年の週数 (週の最初は月曜日になります)。[01,53]
1 月 1 日が含まれる週に、新年になってからの日数が 4 日以上ある場合、
第 1 週とみなします。それ以外の場合、その週は前年の第 53 週、 翌週が第 1 週となります。 | | %w | | 10 進数で表した [0 (日曜日),6] の範囲の曜日 | | %W | | 1 年の週数 (10 進数表記) [00,53]。週の最初は月曜日になります。
新年の最初の月曜日より前の日は、第 0 週とみなします。 | | %x | | ロケールに従った日付の表現 | | %X | | ロケールに従った時刻の表現 | | %y | | 10 進数で表した上位 2 桁を除いた [00,99] の範囲の年 | | %Y | | 10 進数で表した上位 2 桁を含む年 | | %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 の各指令について、フィールド幅および精度指定をしなかった場合、 j については .3 が、その他については .2 がそれぞれ指定されたことになります。 アプリケーション使用法_INCLUDE__STDC_A1_SOURCE プロトタイプを使用するには、 _INCLUDE__STDC_A1_SOURCE フラグをコンパイラオプションとして渡してください。 多言語化対応ロケール上で説明した指令のなかで、ロケールに従って行うものをどのような文字に置き換えるかは LC_TIME カテゴリによって決ります。 format 中の各バイトが、シングルバイト文字であるか、マルチバイト文字であるか、また、ワイドキャラクタをどのように変換するかは、 LC_CTYPE カテゴリによって決ります。 数を変換結果とする指令が、数字列を作るために使う文字は、 LC_NUMERIC カテゴリによって決ります。 ALT_DIGITS (langinfo(5) を参照) が locale として定義されている場合、既定の
ASCII 文字に代わって、指定された文字を使います。ALT_DIGITS および ALT_DIGIT が、どちらもロケール用に定義されている場合、ALT_DIGITS の定義が ALT_DIGIT よりも優先されます。 環境変数TZ によって、 %Z および %z を置き換える時間帯名が決ります。
時間帯名は外部変数 tzname (ctime(3C) を参照) を設定する関数 tzset() を呼び出すことによって決ります。 サポートされる文字コードセットシングル/マルチバイト文字コードがサポートされています。 戻り値変換結果のワイドキャラクタの総数が終端の null ワイドキャラクタを含めても maxsize を超えない場合、 wcsftime() は、 ws が指す配列に出力したワイドキャラクタの数 (終端の
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 |
*
これらの例で使っている指令は locale の LC_TIME カテゴリの影響を受けません。
警告wcsftime() を呼び出すと、時間帯名を配列に出力しない場合でも、必ず関数 tzset() を呼び出します。 %S の返す範囲 ([0,61]) は 1 または 2 秒の閏秒のために
61 まで使えるようになっています。 しかし、システムは閏秒を使用せず、関数 localtime() および gmtime() (ctime(3C) を参照) が作る tm 構造体は閏秒を無視しています。 timeptr が指す構造体中の値が、 tm 構造体
(ctime(3C) を参照) として定義してある範囲を超えていたり、矛盾していたりする場合
(たとえば、 tm_yday 要素が 1 月 1 日を表す 0 となっていて、 tm_mon 要素が
12 月を表す 11 となっているなど)、結果は不定です。 著者wcsftime() は、OSF および HP で開発されました。
|