Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       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_wdaytm_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/ に書かれている。