Manpages

名 前

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() が フ ォ ー マ ッ ト 文 字 列 の す べ て の 比 較 に 失 敗 し 、 エ ラ ー が 起 こ っ た 場 合 、 関 数 は ヌ ル ポ イ ン タ ー を 返 す 。

準 拠

SUSv2, POSIX.1−2001.

注 意

原 則 と し て 、 こ の 関 数 は 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(struct 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 プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。