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


OpenVMS マニュアル


 

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

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

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


目次 索引




文字列を, tm構造体に格納される日付および時刻値に変換します。変換は書式文字列によって制御されます。

形式

#include <time.h>

char *strptime (const char *buf, const char *format, struct tm *timeptr);

関数バリアント strptime関数は,それぞれ 32 ビットと 64 ビットのポインタ・サイズで使用するための _strptime32_strptime64という名前のバリアントを持っています。ポインタ・サイズ固有の関数の使用方法については,『HP C ランタイム・ライブラリ・リファレンス・マニュアル(上巻)』第 1.9 節を参照してください。

引数



buf

変換する文字列へのポインタ。

format

入力文字列の変換方法を定義する文字列へのポインタ。

timeptr

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

説明

strptime関数は, buf がポイントする文字列を, timeptr がポイントする構造体に格納される値に変換します。 format がポイントする文字列は,変換の実行方法を定義します。

strptime関数は, tm構造体の中のフィールドのうち,対応する変換指定が書式に含まれているもののみを変更します。特に, strptimetm構造体の tm_isdstメンバは決して設定しません。

書式文字列は 0 個以上のディレクティブから構成されます。ディレクティブは,以下のいずれかから構成されます。

  • 1 つまたは複数の空白文字 ( isspace関数の定義に従う)。このディレクティブが指定された場合,関数は空白文字でない最初の文字まで入力を読み込む。

  • パーセント文字 (%) または空白文字以外の任意の文字。このディレクティブが指定された場合,関数は次の文字を読み込む。読み込まれた文字は,ディレクティブを構成する文字と同じでなくてはならない。文字が異なった場合,関数は実行に失敗する。

  • 変換指定。変換指定は,入力文字列の中の文字が, tm構造体に格納される値としてどのように解釈されるかを定義する。変換指定は,パーセント文字 (%) の後に変換指定子を続けたものである。 表 1-9 は有効な変換指定を示している。

strptime関数は,プログラムの現在のロケールの LC_TIME カテゴリのフィールドから値を取得します。

  注意
X/Open CAE Specification System Interfaces and Headers Issue 5 ( 通称 XPG5) に準拠するために, strptime関数は "%y" ディレクティブを,これまでのバージョンの HP C RTL とは異なる方法で処理します。

V6.4 およびそれ以降の C コンパイラでは,世紀内の 2 桁の年について,世紀が指定されていなかった場合, "%y" ディレクティブの値が次のように解釈されます。

  • 69〜99 は,20 世紀の年を表す (1969 年から 1999 年まで)

  • 00〜68 は,21 世紀の年を表す (2000 年から 2068 年まで)

これまでの (XPG4 準拠の) バージョンの HP C RTL では, strptimeは世紀が指定されない 2 桁の年を, 20 世紀の年として解釈していました。

現在では,XPG-5 準拠の strptimeが, HP C RTL のデフォルト・バージョンとなっています。

以前の XPG4 準拠の strptime関数の動作を利用するには,以下のいずれかを指定します。

  • DECC$XPG4_STRPTIME 論理名を次のように定義する:

    $ DEFINE DECC$XPG4_STRPTIME ENABLE 
    


    または

  • 関数 decc$strptime_xpg4として, XPG4 の strptimeを直接に呼び出す。

XPG5 バージョンの strptimeに戻すには, DECC$XPG4_STRPTIME 論理名に対して DEASSIGN を実行します:

$ DEASSIGN DECC$XPG4_STRPTIME 

表 1-9 strptime の変換指定
指定 置き換え
%a 曜日名。短縮名または完全な名前。
%A %a と同じ。
%b 月の名前。短縮名または完全な名前。
%B %b と同じ。
%c ロケールの日付書式を使用した日付と時刻。
%Ec ロケールの代替日付および時刻表現。
%C 10 進数 (00〜99) としての世紀 (年を 100 で割り,整数に切り捨て)。先頭のゼロは許容される。
%EC ロケールの代替表現での基本年 (期間) の名前。
%d 10 進数 (01〜31) としての,月の中の日。先頭のゼロは許容される。
%Od ロケールの代替数値シンボルを使用した,月の中の日。
%D %m/%d/%y と同じ。
%e %d と同じ。
%Oe ロケールの代替数値シンボルを使用した,月の中の日付。
%h %b と同じ。
%H 10 進数 (00〜23) としての時間 (24 時間制)。先頭のゼロは許容される。
%OH ロケールの代替数値シンボルを使用した時間 (24 時間制)。
%I 10 進数 (01〜12) としての時間 (12 時間制)。先頭のゼロは許容される。
%OI ロケールの代替数値シンボルを使用した時間 (12 時間制)。
%j 10 進数 (001〜366) としての,年の中の日。
%m 10 進数 (01〜12) としての月。先頭のゼロは許容される。
%Om ロケールの代替数値シンボルを使用した月。
%M 10 進数 (00〜59) としての分。先頭のゼロは許容される。
%OM ロケールの代替数値シンボルを使用した分。
%n 任意の空白文字。
%p ロケールの 12 時間制における AM/PM 指定。
%r AM/PM 表記での時刻 ( %I:%M:%S %p )。
%R 24 時間表記での時刻 ( %H:%M )。
%S 10 進数 (00〜61) としての秒。先頭のゼロは許容される。
%OS ロケールの代替数値シンボルを使用した秒。
%t 任意の空白文字。
%T 時刻 ( %H:%M:%S )。
%U 10 進数 (00〜53) としての,その年の週 (最初の日曜日が 1 番目の週の最初の日と見なされる)。先頭のゼロは許容される。
%OU ロケールの代替数値シンボルを使用した,その年の週 (週は日曜日から始まる)。
%w 10 進数としての曜日 (0 [日曜日]〜6)。先頭のゼロは許容される。
%Ow ロケールの代替数値シンボルを使用した,数値としての曜日 (日曜日 =0)。
%W 10 進数 (00〜53) としての,その年の週 (最初の月曜日が 1 番目の週の最初の日と見なされる)。
%OW ロケールの代替数値シンボルを使用した,その年の週 (週は月曜日から始まる)。
%x ロケールの適切な日付表現。
%Ex ロケールの代替日付表現。
%EX ロケールの代替時刻表現。
%X ロケールの適切な時刻表現。
%y 10 進数 (00〜99) としての,世紀を除いた年。
%Ey ロケールの代替表現における基本年 ( %EC ) からのオフセット。
%Oy ロケールの代替数値シンボルを使用した,世紀を除いた年。
%Y 10 進数としての,世紀を含む年。
%EY ロケールの完全な代替年表現。
%% リテラルの % 文字。


戻り値

x 最後に解析された文字の次の文字へのポインタ。
NULL エラーが発生したことを示します。 tm 構造体の内容は未定義となります。


#include <string.h> 
#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 takes a number of date and time strings and     */ 
/* converts them into tm structs using strptime().  These tm    */ 
/* structs are then passed to strftime() which will reverse the */ 
/* process.  The resulting strings are then compared with the   */ 
/* originals and if a difference is found then an error is      */ 
/* displayed.                                                   */ 
 
main() 
{ 
    int count, 
        i; 
    char buffer[BUF_SIZE]; 
    char *ret_val; 
    struct tm time_struct; 
    char dates[NUM_OF_DATES][BUF_SIZE] = 
    { 
        "Thursday 01 January 1970 00:08:20", 
        "Tuesday 29 February 1972 08:26:40", 
        "Tuesday 31 December 1991 23:59:59", 
        "Wednesday 01 January 1992 00:00:00", 
        "Sunday 03 May 1992 13:33:20", 
        "Monday 04 May 1992 17:20:00", 
        "Friday 15 May 1992 03:20:00"}; 
 
    for (i = 0; i < NUM_OF_DATES; i++) { 
        /* Convert to a tm structure */ 
        ret_val = strptime(dates[i], "%A %d %B %Y %T", &time_struct); 
 
        /* Check the return value */ 
        if (ret_val == (char *) NULL) { 
            perror("strptime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Convert the time structure back to a formatted string */ 
count = strftime(buffer, BUF_SIZE, "%A %d %B %Y %T",&time_struct); 
 
        /* Check the return value */ 
        if (count == 0) { 
            perror("strftime"); 
            exit(EXIT_FAILURE); 
        } 
 
        /* Check the result */ 
        if (strcmp(buffer, dates[i]) != 0) { 
        printf("Error: Converted string differs from the original\n"); 
        } 
        else { 
            printf("Successfully converted <%s>\n", dates[i]); 
        } 
    } 
} 

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

Successfully converted <Thursday 01 January 1970 00:08:20> 
Successfully converted <Tuesday 29 February 1972 08:26:40> 
Successfully converted <Tuesday 31 December 1991 23:59:59> 
Successfully converted <Wednesday 01 January 1992 00:00:00> 
Successfully converted <Sunday 03 May 1992 13:33:20> 
Successfully converted <Monday 04 May 1992 17:20:00> 
Successfully converted <Friday 15 May 1992 03:20:00> 


目次 索引

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