Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all
名前
strptime - 文字列であらわされている時間を tm 構造体の時間に変換する
書式
#define _XOPEN_SOURCE /* feature_test_macros(7) 参照 */ #include <time.h> char *strptime(const char *s, const char *format, struct tm *tm);
説明
strptime() 関数は strftime(3) の逆関数である。 ポインター s が指す文字列を format で指定さ れたフォーマットを使って「要素別の時刻」に変換し、tm が指す構造体に格納する。 要素別の時刻構造体 tm は <time.h> 内で以下の様に定義されている。 struct tm { int tm_sec; /* 秒 (0-60) */ int tm_min; /* 分 (0-59) */ int tm_hour; /* 時間 (0-23) */ int tm_mday; /* 月内の日付 (1-31) */ int tm_mon; /* 月 (0-11) */ int tm_year; /* 年 - 1900 */ int tm_wday; /* 曜日 (0-6, 日曜 = 0) */ int tm_yday; /* 年内通算日 (0-365, 1 月 1 日 = 0) */ int tm_isdst; /* 夏時間 */ }; tm 構造体の詳細は ctime(3) を参照。 format 引数は、 scanf(3) で使われているような、 フィールドディスクリプターとテキスト文字 で構成されている文字列である。 個々のフィールドディスクリプターは % とそれに続く文字からな り、 後者にフィールドディスクリプターを置き換える内容を指定する。 format 文字列中の他の全 ての文字には、入力文字列にマッチする文字がなければならない。 フォーマット文字列中にある空 白は例外であり、 入力文字列中の 0 個以上の空白とマッチする。 2 つのフィールドディスクリプ ターの間には、 空白・英字・数字がなければならない。 strptime() 関数は、入力文字列を左から右へ処理する。 入力された 3 つの要素 (空白・文字・ フォーマット) は、順に処理される。 入力がフォーマット文字列とマッチできない場合、関数は停 止する。 残りのフォーマット文字列と入力文字列は処理されない。 使用可能なフィールドディスクリプターを以下に挙げる。 (曜日や月の名前といった) 文字列をマッ チさせる場合、 大文字と小文字は区別せずに比較する。 数をマッチさせる場合、前に 0 をつけて も構わないが必ずしも必要ではない。 %% 文字としての %。 %a または %A 現在のロケールでの曜日名 (省略名または完全な名前)。 %b または %B または %h 現在のロケールでの月名 (省略名または完全な名前)。 %c 現在のロケールでの日付と時刻の表現。 %C 1 世紀中の年 (0–99)。 %d または %e 月内の日付 (1–31)。 %D 日付。 %m/%d/%y と同じ。 (これはアメリカ式の日付形式で、 ヨーロッパでは特に %d/%m/%y という形式が広く使われているために、 アメリカ人以外には紛らわしく感じられ る。 ISO 8601 規格では %Y-%m-%d という形式である。) %H 時間 (0–23)。 %I 12 時間制での時間 (1–12)。 %j 年の初めからの通算の日付 (1–366)。 %m 数字表現の月 (1–12)。 %M 分 (0–59)。 %n 任意の空白。 %p ロケールの AM (午前) と PM (午後) に対応するもの。 (注意: 対応するものがないかもし れない。) %r (ロケールの AM と PM を使った) 12 時間制の時間。 POSIX ロケールでは %I:%M:%S %p と 同じ。 現在のロケールにおいて LC_TIME パートの t_fmt_ampm が定義されていない場合、 動作は未定義である。 %R %H:%M と同じ。 %S 秒 (0–60; 60 は閏秒を示す。以前は 61 も指定できた)。 %t 任意の空白。 %T %H:%M:%S と同じ。 %U 日曜日を週の始まりとした年通算での週数 (0–53)。 1 月の最初の日曜日を第 1 週目の最初 の日する。 %w 曜日を表す数字 (0–6)、日曜日 が 0。 %W 月曜日を週の始まりとした年通算での週数 (0–53)。 1 月の最初の月曜日を第 1 週目の最初 の日する。 %x 日付。ロケールの日付フォーマットを使う。 %X 時刻。ロケールの時刻フォーマットを使う。 %y 1 世紀中の年 (0–99)。 世紀が指定されない場合、 値が 69–99 の範囲のときは 20 世紀の 年 (1969–1999)、 値が 00–68 の範囲のときは 21 世紀の年 (2000–2068) とする。 %Y 年。世紀の部分を含む (例: 1991)。 E や O という修飾子を使うことで変更できるフィールドディスクリプターもある。 これらの修飾子 は、別のフォーマットや仕様を使うことを指示する。 別のフォーマットや仕様が現在のロケールに 存在しないときは、 変更していないフィールドディスクリプターが使われる。 E 修飾子は、ロケールに依存した日付と時刻の別の表現形式が 入力文字列に含まれていることを指 定する。 %Ec 日付と時刻。ロケールに依存した別の表現形式を使う。 %EC 基準年 (期間) の名前。ロケールに依存した別の表現形式を使う。 %Ex 日付。ロケールに依存した別の表現形式を使う。 %EX 時刻。ロケールに依存した別の表現形式を使う。 %Ey %EC (年のみ) からのオフセット。ロケールに依存した別の表現形式を使う。 %EY 完全な形式の年。別の表現型式を使う。 O 修飾子は、ロケールに依存した別のフォーマットの中に 数値の入力があることを指定する。 %Od または %Oe 月の初めからの通算の日付。ロケールに依存した別の数値シンボルを使う。 0 を頭につけて もよいが、必須ではない。 %OH 時間 (24 時間制)。ロケールに依存した別の数値シンボルを使う。 %OI 時間 (12 時間制)。ロケールに依存した別の数値シンボルを使う。 %Om 月。ロケールに依存した別の数値シンボルを使う。 %OM 分。ロケールに依存した別の数値シンボルを使う。 %OS 秒。ロケールに依存した別の数値シンボルを使う。 %OU 年の初めからの通算の週数 (日曜日を週の始めとする)。 ロケールに依存した別の数値シン ボルを使う。 %Ow 曜日を表す数字 (日曜日 が 0)、 ロケールに依存した別の数値シンボルを使う。 %OW 年の初めからの通算の週数 (月曜日を週の始めとする)。 ロケールに依存した別の数値シン ボルを使う。 %Oy 年 (%C からのオフセット)。ロケールに依存した別の数値シンボルを使う。
返り値
この関数の返り値は、関数の中で処理されなかった最初の文字へのポインターである。 フォーマッ ト文字列が必要する以上の文字が入力文字列に含まれている場合、 返り値は最後に処理された入力 文字の次の文字を指す。 すべての入力文字列が処理された場合、 返り値は文字列末尾のヌルバイト を指す。 strptime() がフォーマット文字列のすべての比較に失敗し、 エラーが起こった場合、関 数はヌルポインターを返す。
属性
この節で使用されている用語の説明については、 attributes(7) を参照。 ┌─────────────────┬───────────────┬────────────────────┐ │インターフェース │ 属性 │ 値 │ ├─────────────────┼───────────────┼────────────────────┤ │ strptime() │ Thread safety │ MT-Safe env locale │ └─────────────────┴───────────────┴────────────────────┘
準拠
POSIX.1-2001, POSIX.1-2008, SUSv2.
注意
原則として、この関数は tm の初期化はせずに、 指定された値のみを入れる。 つまり、この関数の 呼び出しの前に tm を初期化しなければならない。 他の UNIX システムとは、細かい点で異なる。 glibc の実装では、明示的に指定されないフィールドは変更されない。 例外として、年・月・日の いずれかの要素が変更された場合に tm_wday と tm_yday が再計算される。 'y' (1 世紀中の年) の指定は、 glibc 2.0 では、 1950–2049 の範囲として解釈される。 glibc 2.1 からは 1969–2068 の範囲として解釈される。 glibc での注意 一貫性を持たせるため、glibc では strptime() に strftime(3) と同じフォーマット文字をサポー トさせようとしている。多くの場合、対応するフィールドが解釈されるが、 tm フィールドは変更さ れない。使用可能なフォーマット文字を以下に示す。 %F %Y-%m-%d と同じ。ISO 8601 の日付形式。 %g ISO 週数に対応した西暦年。世紀は含まず (0–99) の範囲。 %G ISO 週数に対応した西暦年 (例えば 1991)。 %u 10 進数表記の曜日 (1–7 で月曜日を 1 とする)。 %V ISO 8601:1988 形式での年通算の 10 進数表記での週数 (1–53)。 1 月 1 日を含む (月曜日 から始まる) 週に 4 日以上が含まれている場合は、 その週を第 1 週とする。 3 日以下し か含まれていない場合は、1 月 1 日を含む週を前年の最終の週として、 次の週を第 1 週と する。 %z RFC-822/ISO 8601 標準タイムゾーンを指定する。 %Z タイムゾーン名。 同様に、 strftime(3) の GNU 版での拡張に対応するために、 %k は %H、 %P は %p と等価に扱わ れる。また、 %l は %I と等価に扱われるようになるはずである。 さらに以下も定義されている。 %s 紀元 (Epoch; 1970-01-01 00:00:00 +0000 (UTC)) からの通算の秒数。 閏秒がサポートされ ていない限り、閏秒はカウントしない。 glibc における実装では、2 つのフィールド間の空白は必要ない。
例
以下の例は strptime() と strftime(3) の使用法を示している。 #define _XOPEN_SOURCE #include <stdio.h> #include <stdlib.h> #include <string.h> #include <time.h> int main(void) { struct tm tm; char buf[255]; memset(&tm, 0, sizeof(tm)); strptime("2001-11-12 18:31:01", "%Y-%m-%d %H:%M:%S", &tm); strftime(buf, sizeof(buf), "%d %b %Y %H:%M", &tm); puts(buf); exit(EXIT_SUCCESS); }
関連項目
time(2), getdate(3), scanf(3), setlocale(3), strftime(3)
この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの 説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。