日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトル
目次
まえがき
リファレンス・セクション
   ≫ライブラリ関数一覧
索引
PDF
OpenVMS ホーム

HP OpenVMS
HP C ランタイム・ライブラリ・リファレンス・マニュアル (下巻)


目次 索引




tm構造体に格納されている日付および時刻情報を使って出力文字列を作成します。出力文字列の書式は書式文字列によって制御されます。

形式

#include <time.h>

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

関数バリアント _DECC_V4_SOURCE および _VMS_V6_SOURCE 機能テスト・マクロを定義してコンパイルすると,OpenVMS Version 7.0 およびそれ以前の動作と等価な, strftime関数へのローカル時刻ベースのエントリ・ポイントが使用可能となります。

引数



s

結果として得られる文字列へのポインタ。

maxsize

結果として得られる文字列に格納される最大バイト数 ( 終端の null を含みます )。

format

出力文字列の書式を制御する文字列へのポインタ。

timeptr

ローカル時刻 ( tm) 構造体へのポインタ。 tm構造体は <time.h>ヘッダ・ファイルに定義されています。

説明

strftime関数は,timeptr がポイントする構造体に含まれているデータを使用して,s がポイントする文字列を作成します。最高 maxsize バイトが s にコピーされます。

書式文字列は,0 個以上の変換指定と通常の文字から構成されています。すべての通常の文字は ( 終端の null 文字を含めて ),変更なしに出力文字列にコピーされます。変換指定は, tm構造体の中のデータが,出力文字列でどのように整形されるかを定義します。

変換指定は,パーセント文字 (%), 1 つまたは複数のオプションの文字 ( 表 1-7 を参照 ),および変換指定子 ( 表 1-8 を参照) から構成されます。 表 1-7 に示しているオプション文字が指定される場合,それらの文字は表に示した順序で現れなくてはなりません。

strftime関数は, tzsetを呼び出した場合と同じように動作します。

表 1-7 strftime 変換指定のオプション要素
要素 意味
-- フィールド幅にオプションとして付け,そのフィールドが左揃えされ,スペースでパディングされることを示す。0 要素と同時に使用することはできない。
0 フィールド幅にオプションとして付け,そのフィールドが右揃えされ,ゼロでパディングされることを示す。 -- 要素と同時に使用することはできない。
フィールド幅 最大フィールド幅を指定する 10 進整数。
.precision フィールド内のデータの精度を指定する 10 進整数。

d, H, I, j, m, M, o, S, U, w, W, y, および Y 変換指定子では,精度指定子は,フィールド内の桁数の最小値である。変換指定が精度によって指定された桁数よりも少ない場合には,先頭にゼロが追加される。

a, A, b, B, c, D, E, h, n, N, p, r, t, T, x, X, Z, および % 変換指定子では,精度指定子は,フィールド内の文字数の最大値である。変換指定が精度によって指定された桁数よりも多くの文字を含んでいる場合には,右側の文字が切り捨てられる。

d, H, I, m, M, o, S, U, w, W, y および Y 変換指定子のデフォルトの精度は 2 である。 j 変換指定子のデフォルトの精度は 3 である。

表 1-7 の変換指定のリストは, XPG4 仕様の拡張であることに注意してください。

表 1-8 は変換指定子を示しています。 strftime関数は,プログラムの現在のロケールの LC_TIME カテゴリのフィールドから値を取得します。たとえば, %Bが指定されている場合,関数は LC_TIME の mon フィールドにアクセスして, tm構造体で指定された月の完全な名前を取得します。無効な変換指定子を使用したときの結果は未定義です。

表 1-8 strftime の変換指定子
指定子 置き換え
a ロケールの短縮された曜日名。
A ロケールの完全な曜日名。
b ロケールの短縮された月の名前。
B ロケールの完全な月の名前。
c ロケールの適切な日付および時刻表現。
C 10 進数 (00〜99) として表現される世紀 (年を 100 で割り,整数に切り捨て)。
d その月の 10 進数 (01〜31) として表現される日付。
D %m/%d/%y と同じ。
e 先頭がスペース文字でフィルされた 2 桁のフィールドに格納される,その月の 10 進数 (1〜31) として表現される日付。
Ec ロケールの代替日付および時刻表現。
EC ロケールの代替表現における基本年 (期間) の名前。
Ex ロケールの代替日付表現。
EX ロケールの代替時刻表現。
Ey ロケールの代替表現における基本年 ( %EC ) からのオフセット。
EY ロケールの完全な代替年表現。
h %b と同じ。
H 10 進数 (00〜23) としての時刻 (24 時間制)。
I 10 進数 (01〜12) としての時刻 (12 時間制)。
j 10 進数 (001〜366) としての,その年の中での日。
m 10 進数 (01〜12) としての月。
M 10 進数 (00〜59) としての分。
n 改行文字。
Od ロケールの代替数値シンボルを使用した,その月の中での日。
Oe ロケールの代替数値シンボルを使用した,その月の中での日付。
OH ロケールの代替数値シンボルを使用した時刻 (24 時間制)。
OI ロケールの代替数値シンボルを使用した時刻 (12 時間制)。
Om ロケールの代替数値シンボルを使用した月。
OM ロケールの代替数値シンボルを使用した分。
OS ロケールの代替数値シンボルを使用した秒。
Ou ロケールの代替表現での曜日を数値で表したもの (月曜日 =1)。
OU ロケールの代替数値シンボルを使用した,その年の中での週 (週は日曜日から始まる)。
OV ロケールの代替数値シンボルを使用した,10 進数 (01〜53) としての,その年の中での週 (週は月曜日から始まる)。1 月 1 日を含んでいる週が,新年に 4 日以上ある場合には,その週が 1 番目の週と見なされる。そうでない場合は,前年の 53 番目の週と見なされ,次の週が 1 番目の週となる。
Ow ロケールの代替数値シンボルを使用した,数値としての曜日 (日曜日 =0)。
OW ロケールの代替数値シンボルを使用した,その年の中での数値としての週 (週は月曜日から始まる)。
Oy ロケールの代替数値シンボルを使用した,世紀を除いた年。
p ロケールの 12 時間制における AM/PM 指定。
r AM/PM 表記での時刻。
R 24 時間表記での時刻 ( %H:%M )。
S 10 進数 (00〜61) としての秒。
t タブ文字。
T 時刻 ( %H:%M:%S )。
u 1〜7 の範囲の 10 進数としての曜日 (月曜日 =1)。
U 10 進数 (00〜53) としての,その年の中の週 (最初の日曜日が 1 番目の週の最初の日と見なされる)。
V 10 進数 (00〜53) としての,その年の中の週 (週は月曜日から始まる)。 1 月 1 日を含んでいる週が,新年に 4 日以上ある場合には,その週が 1 番目の週と見なされる。そうでない場合は,前年の 53 番目の週と見なされ,次の週が 1 番目の週となる。
w 10 進数 (0 [日曜日]〜6) としての曜日。
W 10 進数 (00〜53) としての,その年の中での週 (最初の月曜日が 1 番目の週の最初の日と見なされる)。
x ロケールの適切な日付表現。
X ロケールの適切な時刻表現。
y 10 進数 (00〜99) としての,世紀を除いた年。
Y 10 進数としての,世紀を含んだ年。
Z タイム・ゾーン名またはその短縮形。タイム・ゾーン情報がない場合には,文字は出力されない。
% リテラルの % 文字。


戻り値

x s がポイントする配列に格納された文字数。終端の null 文字は含まれません。
0 エラーが発生したことを示します。配列の内容は不定です。


#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 
#include <locale.h> 
#include <errno.h> 
 
#define NUM_OF_DATES  7 
#define BUF_SIZE 256 
 
/* This program formats a number of different dates, once */ 
/* using the C locale and then using the fr_FR.ISO8859-1  */ 
/* locale. Date and time formatting is done using strftime(). */ 
 
main() 
{ 
    int count, 
        i; 
    char buffer[BUF_SIZE]; 
    struct tm *tm_ptr; 
    time_t time_list[NUM_OF_DATES] = 
    {500, 68200000, 694223999, 694224000, 
     704900000, 705000000, 705900000}; 
 
    /* Display dates using the C locale */ 
    printf("\nUsing the C locale:\n\n"); 
 
    setlocale(LC_ALL, "C"); 
 
    for (i = 0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        tm_ptr = localtime(&time_list[i]); 
 
        /* Format the date and time */ 
        count = strftime(buffer, BUF_SIZE, 
               "Date: %A %d %B %Y%nTime: %T%n%n", tm_ptr); 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Print the result */ 
       printf(buffer); 
    } 
 
    /* Display dates using the fr_FR.ISO8859-1 locale */ 
    printf("\nUsing the fr_FR.ISO8859-1 locale:\n\n"); 
 
    setlocale(LC_ALL, "fr_FR.ISO8859-1"); 
 
    for (i = 0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        tm_ptr = localtime(&time_list[i]); 
 
        /* Format the date and time */ 
        count = strftime(buffer, BUF_SIZE, 
               "Date: %A %d %B %Y%nTime: %T%n%n", tm_ptr); 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Print the result */ 
        printf(buffer); 
    } 
} 

この例のプログラムを実行すると,次の出力が生成されます。

Using the C locale: 
 
Date: Thursday 01 January 1970 
Time: 00:08:20 
 
Date: Tuesday 29 February 1972 
Time: 08:26:40 
 
Date: Tuesday 31 December 1991 
Time: 23:59:59 
 
Date: Wednesday 01 January 1992 
Time: 00:00:00 
 
Date: Sunday 03 May 1992 
Time: 13:33:20 
 
Date: Monday 04 May 1992 
Time: 17:20:00 
 
Date: Friday 15 May 1992 
Time: 03:20:00 
 
 
Using the fr_FR.ISO8859-1 locale: 
 
Date: jeudi 01 janvier 1970 
Time: 00:08:20 
 
Date: mardi 29 f□rier 1972 
Time: 08:26:40 
 
Date: mardi 31 d□embre 1991 
Time: 23:59:59 
 
Date: mercredi 01 janvier 1992 
Time: 00:00:00 
 
Date: dimanche 03 mai 1992 
Time: 13:33:20 
 
Date: lundi 04 mai 1992 
Time: 17:20:00 
 
Date: vendredi 15 mai 1992 
Time: 03:20:00 


目次 索引

© 2012 Hewlett-Packard Development Company, L.P.