構文
#include <time.h>
char *strptime(const char *buf, const char *format,
struct tm *tm);
説明
strptime() 関数は、 format で指定されている形式を使用して buf でポイントされている文字列を変換し、 tm でポイントされている tm 構造体に保存します。
format は、いくつかの指令で構成されます (指令がない場合もあります)。各指令は、1 つ以上の空白文字
(isspace() 関数で指定)、一般の文字 (% と空白文字以外のもの)、または変換指定のいずれかで構成されます。この変換指定は、 % 文字と、必要な置き換えを指示する変換文字で構成されます。複数の変換指定がある場合、空白文字または英数字以外の他の文字を使用して区切る必要があります。次の変換指定がサポートされています。
| %a | | 曜日です。ロケールの曜日名を使用します。省略名または完全名を指定することができます。 |
| %A | | %a と同じです。 |
| %b | | 月です。ロケールの月名を使用します。省略名または完全名を指定することができます。 |
| %B | | %b と同じです。 |
| %c | | 日付と時刻です。ロケールの日付と時刻のフォーマットを使用します
(例: %x %X)。 |
| %C | | 世紀を表す年代です [0,99]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %d | | 日にちです [1,31]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %D | | %m/%d/%y の形式の日付です。 |
| %e | | %d と同じです。 |
| %h | | %b と同じです。 |
| %H | | (24 時間形式で表した) 時間です [0,23]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %I | | (12 時間形式で表した) 時間です [0,12]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %j | | 年の通算日数です [1,366]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %m | | 月です [1,12]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %M | | 分です [0,59]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %n | | 空白文字です。 |
| %p | | a.m. や p.m. に相当するロケール値です。 |
| %r | | %I:%M:%S %p の形式の時刻です。 |
| %R | | %H:%M の形式の時刻です。 |
| %S | | 秒です [0,61]。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %t | | 空白文字です。 |
| %T | | %H:%M:%S の形式の時刻です。 |
| %U | | 10 進数で表した 1 年の中の週番号 (週の先頭は日曜日)
です [0,53]。先行するゼロがあってもかまいませんが、必須ではありません。年の最初の日曜日より前にある日は週 0 とみなします。 |
| %w | | 10 進数で表した曜日です [0,6]。日曜日を 0 とします。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %W | | 10 進数で表した 1 年の中の週番号 (週の先頭は月曜日)
です [0,53]。先行するゼロがあってもかまいませんが、必須ではありません。年の最初の月曜日より前にある日は週 0 とみなします。 |
| %x | | ロケールの日付形式を使用した日付です。 |
| %X | | ロケールの時刻形式を使用した時刻です。 |
| %y | | 世紀内における年です [0,99]。先行するゼロがあってもかまいませんが、必須ではありません。
(%C 指令の使用などにより) 世紀が指定されていない場合、69-99
の範囲の入力は 20 世紀 (1900 年代) と想定されます。00-68 の範囲の入力は
21 世紀 (2000 年代) と想定されます。 |
| %Y | | 世紀を含めた年です (例、1992)。 |
| %% | | % に置き換えられています。 |
指令変更
E と O の修飾文字を使用して指令を変更することによって、通常の指令ではなく、代替の形式または仕様を使用するよう指示することができます。現在のロケールに代替の形式または仕様がない場合は、通常の指令と同じ動作になります。
| %Ec | | ロケールの代替の日時表示形式です。 |
| %EC | | ロケールの代替表示形式での年号 (時代) です。 |
| %Ex | | ロケールの代替の日付表示形式です。 |
| %EX | | ロケールの代替の時刻表示形式です。 |
| %Ey | | ロケールの代替表示形式での %EC からのオフセットです
(年のみ)。 |
| %EY | | 代替の完全な年表示形式です。 |
| %Od | | ロケールの代替の数値記号を使用して表した月内の日にちです。先行するゼロがあってもかまいませんが、必須ではありません。 |
| %Oe | | %Od と同じです。 |
| %OH | | ロケールの代替の数値記号を使用して表した時間 (24
時) です。 |
| %OI | | ロケールの代替の数値記号を使用して表した時間 (12
時) です。 |
| %Om | | ロケールの代替の数値記号を使用して表した月です。 |
| %OM | | ロケールの代替の数値記号を使用して表した分です。 |
| %OS | | ロケールの代替の数値記号を使用して表した秒です。 |
| %OU | | ロケールの代替の数値記号を使用して表した、1 年の中の週番号
(週の先頭は日曜日) です。 |
| %Ow | | ロケールの代替の数値記号を使用して表した曜日番号です
(日曜日が 0)。 |
| %OW | | ロケールの代替の数値記号を使用して表した、1 年の中の週番号
(週の先頭は月曜日) です。 |
| %Oy | | ロケールの代替表示形式にある年 (%C からのオフセット)
をロケールの代替の数値記号を使用して表したものです。 |
空白文字で構成されている指令は、入力が空白文字以外の最初の文字
(走査されないで残ります) となるまで、または文字がなくなるまで走査することによって実行されます。
一般の文字の指令は、バッファーから次の文字を走査することによって実行されます。バッファーから走査された文字が指令を構成する文字と違っていると、指令は正常に実行せず、違っている文字と後に続く文字は走査されないままで残ります。
%n、 %t、 空白文字、または任意の組み合わせの一連の指令は、空白文字以外の最初の文字
(走査されないで残ります) となるまで、または文字がなくなるまで走査することによって実行されます。
その他の変換指定は、次の指令と一致する文字を走査するまで、または文字がなくなるまで走査することによって実行されます。次の指令と一致しない文字は、変換指定子と対応するロケール値と比べられます。一致するものがあると、該当の tm 構造体のメンバーの値がロケール情報の値に設定されます。 buf 中の月名や週名などの一致する項目の大文字と小文字は区別されません。一致するものがないと、 strptime() は正常に実行せず、文字はそれ以上走査されません。32
ビット HP-UX において、指定された日付が time_t データ型で表される最大時間
(Tuesday January 19 03:14:07 UTC, 2038) を超える場合、または 62
ビット HP-UX において、サポートされる最大日付 (Friday December 31
23:59:59 UTC, 9999) を超える場合、 strptime() は正常に実行せず、ヌルポインターを返します。
多言語化対応
ロケール
LC_NUMERIC カテゴリに、 %O 修飾子で使用できる代替記号 alt_digit― localedef(4) 参照) が定義されている場合があります。 alt_digit 定義は alt_digits (LC_TIME) よりも優先されます。今後の HP-UX リリースで alt_digit のサポートが取り除かれる可能性があります。
LC_TIME カテゴリによって、上記に説明する指令に解釈される文字がロケールからのものであるかが決まります。
LC_CTYPE カテゴリによって、 format 内のバイトをシングルバイトとマルチバイトのどちらの文字として解釈するかが決まります。
サポートされるコードセット
シングルバイトとマルチバイトの文字コードセットがサポートされています。
戻り値
正常に終了すると、 strptime() は最後に解析した文字の後の文字を指すポインターを返します。そうでなければ、ヌルポインターを返します。
例
次のプログラムセグメントは strptime() を使用して、文字列
(最初の引き数) を、2 つ目の引き数に指定している形式に従った値に変換しています。
struct tm t;
setlocale(LC_TIME, "en_US.iso88591");
strptime("1:04:23 PM on 10/6/92", "%I:%M:%S %p on %D", &t);
変換された値は、構造体に次のように保存されます。
t.tm_sec = 23
t.tm_min = 4
t.tm_hour = 13
t.tm_mday = 6
t.tm_mon = 9
t.tm_year = 92
t.tm_wday = 2
t.tm_yday = 279
t.tm_isdst = 1
著者
strptime() は、OSF および HP で開発されました。