C 言語 | 高度な機能 | 時刻関数 - time(), localtime()

標準 C 関数を使ってコンピューターの時刻を取得できる。時刻は数値として保存されるため、日付として表示するにはローカル時刻へ変換する。

時刻を扱う

時刻に関する関数は time.h で宣言されている。システム時刻を取得するには time() を使用する。

time() 関数

time_t time(time_t *timer);

time_t は処理系が定義する算術型である。time()timer を通じて結果を保存し、同じ値を返す。戻り値だけが必要な場合は NULL を渡せる。失敗すると (time_t)-1 を返す。

多くのシステムは、1970-01-01 00:00:00 UTC から経過した秒数で時刻を表す。time_t をローカルな暦の値へ変換するには localtime() を使用する。

localtime() 関数

struct tm *localtime(const time_t *timer);

localtime()tm 構造体へのポインターを返す。

struct tm {
 int tm_sec;   /* 秒 */
 int tm_min;   /* 分 */
 int tm_hour;  /* 時 */
 int tm_mday;  /* 日 */
 int tm_mon;   /* 1 月からの月数 */
 int tm_year;  /* 1900 年からの年数 */
 int tm_wday;  /* 日曜日からの日数 */
 int tm_yday;  /* 1 月 1 日からの日数 */
 int tm_isdst; /* 夏時間フラグ */
};

tm_mon0 から始まり、tm_year1900 年から数える。

コード 1

#include <stdio.h>
#include <time.h>

int main() {
 struct tm *date;
 const time_t t = time(NULL);
 date = localtime(&t);

 printf("%d/%d/%d %d:%d:%d\n",
   date->tm_year + 1900, date->tm_mon + 1, date->tm_mday,
   date->tm_hour, date->tm_min, date->tm_sec);
 return 0;
}

このプログラムは現在時刻を取得し、ローカル時刻へ変換して年月日と時分秒を表示する。