time() — C言語から現在の時刻を取得するLinux/Unixシステムコール

現在の時刻を取得するには、time() 関数を使用します。

#include <sys/types.h>
#include <time.h>

time_t time(time_t *tloc);

time_t は sys/types.h の中で typedef により unsigned int または unsigned long として定義されています。

引数 tlocには time_t 型の変数のポインタを指定します。time() 関数により、tloc で指定した time_t 型の変数の中に1970年1月1日0時0分0秒からの経過秒数が格納されます。

戻り値には 1970年1月1日0時0分0秒からの経過秒数が返されます。

tloc に格納される値と time() 関数の戻り値は同じです。引数に NULL を指定することもできます。

time_t t;
t = time(&t);
time_t t;
t = time(NULL); /* 引数にNULL指定 */
time_t t;
time(&t); /* 戻り値は無視 */

時刻を表すデータ型には、time_tstruct tm があります。これらを相互に変換したり、文字列に変換する時刻関数群が用意されています。これらの時刻関数の相関図を次に示します。

時刻関数の相関図
Figure 1. 時刻関数の相関図

たとえば、time() 関数で取得した現在の時刻(time_t型)を localtime() 関数を用いて struct tm 型に変換することができます。time_t 型の時刻は、ctime() 関数を用いて文字列に変換することができます。

#include <time.h>

char *ctime(const time_t *clock);

struct tm *localtime(const time_t *clock);

struct tm *gmtime(const time_t *clock);

char *asctime(const struct tm *tm);

戻り値

時刻の取得に成功した場合は、エポック時刻(1970年1月1日0時0分0秒 UTC)からの経過時間を秒単位で返す。

時刻の取得に失敗した場合は、-1 を返す。また、errno にエラー番号が設定される。

エラー

EFAULT
ユーザがアクセスできる空間外を引数 tloc が指している。