Manpages

名 前

getdate, getdate_r − 日 付 と 時 刻 の 文 字 列 を 要 素 別 の 時 刻 に 変 換 す る

書 式

#include <time.h>

struct tm *getdate(const char *string);

extern int getdate_err;

#include <time.h>

int getdate_r(const char *string, struct tm *res);

glibc 向 け の 機 能 検 査 マ ク ロ の 要 件 (feature_test_macros(7) 参 照 ):

getdate():

_XOPEN_SOURCE >= 500 || _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

getdate_r():

_GNU_SOURCE

説 明

getdate() 関 数 は 、 string が 指 す バ ッ フ ァ ー に 格 納 さ れ た 文 字 列 表 現 の 日 付 と 時 刻 を 、 要 素 別 の 時 刻 (broken−down time) に 変 換 す る 。 要 素 別 の 時 刻 は tm 構 造 体 に 格 納 さ れ 、 こ の 構 造 体 へ の ポ イ ン タ ー が 関 数 の 結 果 と し て 返 さ れ る 。 こ の tm 構 造 体 は 静 的 な メ モ リ ー 領 域 に あ り 、 getdate() の そ れ 以 降 の 呼 び 出 し で 上 書 き さ れ る か も さ れ な い 。

(format 引 き 数 で フ ォ ー マ ッ ト を 指 定 す る ) strptime(3) と は 違 い 、 getdate() は 環 境 変 数 DATEMSK で 指 定 さ れ た フ ル パ ス 名 の フ ァ イ ル に 書 い て あ る フ ォ ー マ ッ ト を 用 い る 。 マ ッ チ の 際 に は 大 文 字 小 文 字 を 区 別 し な い 。 パ タ ー ン 中 で も 変 換 さ れ る 文 字 列 中 で も 、 余 分 な 空 白 文 字 は 無 視 さ れ る 。 パ タ ー ン に 指 定 で き る 変 換 指 定 は 、 strptime(3) の も の と 同 じ で あ る 。 POSIX.1−2001 で は 一 つ の 変 換 指 定 が 追 加 で 規 定 さ れ て い る 。

%Z タ イ ム ゾ ー ン の 名 前 。

glibc で は 実 装 さ れ て い な い 。

%Z が 指 定 さ れ た 場 合 、 要 素 別 の 時 刻 を 格 納 す る 構 造 体 は 、 指 定 さ れ た タ イ ム ゾ ー ン に お け る 現 在 時 刻 に 対 応 す る 値 で 初 期 化 さ れ る 。 指 定 さ れ て い な い 場 合 、 こ の 構 造 体 は 現 在 の ロ ー カ ル タ イ ム に 対 応 す る 要 素 別 の 時 刻 で 初 期 化 さ れ る (localtime(3) を 呼 び 出 し た 場 合 と 同 じ )。 曜 日 だ け が 指 定 さ れ た 場 合 、 今 日 ま た は 今 日 以 降 で 、 そ の 曜 日 に 合 致 す る 最 初 の 日 が 採 用 さ れ る 。

(年 な し で ) 月 だ け が 指 定 さ れ た 場 合 、 今 月 ま た は 今 月 以 降 で 、 そ の 月 に 合 致 す る 最 初 の 月 が 採 用 さ れ る 。 時 ・ 分 ・ 秒 が い ず れ も 指 定 さ れ な か っ た 場 合 、 現 在 の 時 ・ 分 ・ 秒 が 採 用 さ れ る 。 日 付 の 指 定 が な か っ た が 、 時 間 (hour) だ け 指 定 さ れ た 場 合 は 、 現 在 の 時 間 ま た は そ れ 以 降 で 、 そ の 指 定 に 合 致 す る 最 初 の 時 間 が 採 用 さ れ る 。

getdate_r() は GNU 拡 張 で getdate() の リ エ ン ト ラ ン ト 版 を 提 供 し て い る 。 getdate_r() で は 、 エ ラ ー を 報 告 す る の に グ ロ ー バ ル 変 数 を 使 用 し た り 、 要 素 別 の 時 刻 を 返 す の に 静 的 な バ ッ フ ァ ー を 使 用 し た り せ ず 、 エ ラ ー を 関 数 の 返 り 値 経 由 で 報 告 し 、 要 素 別 の 時 刻 を 引 き 数 res が 指 し 示 す 呼 び 出 し 側 で 割 り 当 て た バ ッ フ ァ ー に 格 納 し て 返 す 。

返 り 値

成 功 す る と 、 getdate() は struct tm へ の ポ イ ン タ ー を 返 す 。 失 敗 す る と NULL を 返 し 、 グ ロ ー バ ル 変 数 getdate_err に 以 下 に 示 す エ ラ ー 番 号 の い ず れ か 一 つ を 設 定 す る 。 errno の 変 更 に つ い て は 規 定 さ れ て い な い 。 成 功 す る と 、 getdate_r() は 0 を 返 す 。 失 敗 す る と 、 以 下 に 示 す エ ラ ー 番 号 の い ず れ か 一 つ を 返 す 。

エ ラ ー

以 下 の エ ラ ー が 、 (getdate() で は ) getdate_err 経 由 で 返 さ れ 、 (getdate_r() で は ) 関 数 の 返 り 値 と し て 返 さ れ る 。

1 環 境 変 数

DATEMASK が 未 定 義 、 ま た は そ の 値 が 空 文 字 列 で あ る 。

2

DATEMSK で 指 定 さ れ た テ ン プ レ ー ト フ ァ イ ル を 読 み 込 み 用 に オ ー プ ン で き な い 。

3 フ ァ イ ル の ス テ ー タ ス 情 報 が 取 得 で き な い 。

4 テ ン プ レ ー ト フ ァ イ ル が 通 常 の フ ァ イ ル で な い 。

5 テ ン プ レ ー ト フ ァ イ ル の 読 み 込 み 中 に エ ラ ー が 起 こ っ た 。

6 メ モ リ ー の 割 り 当 て に 失 敗 し た

(メ モ リ ー が 足 り な い )。

7 入 力 に マ ッ チ し た フ ァ イ ル に 、 行 が 含 ま れ て い な い 。

8 入 力 指 定 が 正 し く な い 。

環 境 変 数

DATEMSK 書 式 パ タ ー ン を 含 む フ ァ イ ル 。
TZ
, LC_TIME

strptime(3) が 用 い る 変 数 。

属 性

マ ル チ ス レ ッ デ ィ ン グ (pthreads(7) 参 照 )

getdate() 関 数 は ス レ ッ ド セ ー フ で は な い 。

getdate_r() 関 数 は ス レ ッ ド セ ー フ で あ る 。

準 拠

POSIX.1−2001.

注 意

POSIX.1−2001 仕 様 で は 、 strptime(3) に つ い て は %E%O と い っ た 修 正 子 を 用 い た 変 換 指 定 を 規 定 し て い る が 、 getdate() に つ い て は こ の よ う な 修 飾 子 の 規 定 は な い 。 glibc で は 、 getdate() は strptime(3) を 用 い て 実 装 さ れ て お り 、 両 者 で は 全 く 同 じ 変 換 が 両 者 で サ ポ ー ト さ れ て い る 。

以 下 の プ ロ グ ラ ム は 、 コ マ ン ド ラ イ ン 引 き 数 の そ れ ぞ れ に つ い て getdate() を 呼 び 出 し 、 そ れ ぞ れ に つ い て 返 さ れ た tm 構 造 体 の フ ィ ー ル ド 値 を 表 示 す る 。 次 の シ ェ ル セ ッ シ ョ ン は 、 プ ロ グ ラ ム の 動 作 例 で あ る 。

$ TFILE=$PWD/tfile
$ echo '%A' > $TFILE # Full name of the day of the week
$ echo '%T' >> $TFILE # ISO date (YYYY−MM−DD)
$ echo '%F' >> $TFILE # Time (HH:MM:SS)
$ date
$ export DATEMSK=$TFILE
$ ./a.out Tuesday '2009−12−28' '12:22:33'
Sun Sep 7 06:03:36 CEST 2008
Call 1 ("Tuesday") succeeded:
tm_sec = 36
tm_min = 3
tm_hour = 6
tm_mday = 9
tm_mon = 8
tm_year = 108
tm_wday = 2
tm_yday = 252
tm_isdst = 1
Call 2 ("2009−12−28") succeeded:
tm_sec = 36
tm_min = 3
tm_hour = 6
tm_mday = 28
tm_mon = 11
tm_year = 109
tm_wday = 1
tm_yday = 361
tm_isdst = 0
Call 3 ("12:22:33") succeeded:
tm_sec = 33
tm_min = 22
tm_hour = 12
tm_mday = 7
tm_mon = 8
tm_year = 108
tm_wday = 0
tm_yday = 250
tm_isdst = 1 プ ロ グ ラ ム の ソ ー ス

#define _GNU_SOURCE
#include <time.h>
#include <stdio.h>
#include <stdlib.h>

int
main(int argc, char *argv[])
{
struct tm *tmp;
int j;

for (j = 1; j < argc; j++) {
tmp = getdate(argv[j]);

if (tmp == NULL) {
printf("Call %d failed; getdate_err = %d\n",
j, getdate_err);
continue; }

printf("Call %d (\"%s\") succeeded:\n", j, argv[j]);
printf(" tm_sec = %d\n", tmp−>tm_sec);
printf(" tm_min = %d\n", tmp−>tm_min);
printf(" tm_hour = %d\n", tmp−>tm_hour);
printf(" tm_mday = %d\n", tmp−>tm_mday);
printf(" tm_mon = %d\n", tmp−>tm_mon);
printf(" tm_year = %d\n", tmp−>tm_year);
printf(" tm_wday = %d\n", tmp−>tm_wday);
printf(" tm_yday = %d\n", tmp−>tm_yday);
printf(" tm_isdst = %d\n", tmp−>tm_isdst); }

exit(EXIT_SUCCESS); }

関 連 項 目

time(2), localtime(3), setlocale(3), strftime(3), strptime(3)

こ の 文 書 に つ い て

こ の man ペ ー ジ は Linux man−pages プ ロ ジ ェ ク ト の リ リ ー ス 3.79 の 一 部 で あ る 。 プ ロ ジ ェ ク ト の 説 明 と バ グ 報 告 に 関 す る 情 報 は http://www.kernel.org/doc/man−pages/ に 書 か れ て い る 。