gmtime関数とlocaltime関数は、紀元(1970年1月1日00:00:00 UTC)からの経過秒数を日時情報に変換します。日時情報はtm構造体と呼ぶ構造体のメンバーとして作成します。なお、経過秒数はtime関数で取得することができます。

gmtime関数とlocaltime関数の相違は、gmtime関数は協定世界時(UTC)での時刻へ変換するのに対して、localtime関数はローカル標準時での時刻へ変換します。従って、通常はlocaltime関数を使用して、日本標準時(JST)に変換します。ちなみに、JSTは「UTC+9時間」です。

#include <time.h>
struct tm *gmtime(const time_t *timep);
struct tm *localtime(const time_t *timep);

*timepは紀元からの経過秒数を指定します。

戻り値として、tm構造体のポインタを返します。エラーの場合は、NULLを返します。

tm構造体は<time.h>で定義されており、次のようなメンバーで構成されています。

メンバー名 内容
tm_sec 秒数で、0から59までの値です。(但し、閏秒のため60までの値は許されます。)
tm_min 分数で、0から59までの値です。
tm_hour 真夜中からの通算時間で、0から23までの値です。
tm_mday 月はじめからの日数で、1から31までの値です。
tm_mon 1月からの通算月数で、0から11までの値です。
tm_year 1900年からの通算年数です。
tm_wday 日曜日からの通算日数(曜日)で、0から6までの値です。(0が日曜日です。)
tm_yday 1月1日からの通算日数で、0から365までの値です。
tm_isdst 夏時間が有効かどうかのフラグです。正の値ならば夏時間は有効になり、0ならば無効、負の値ならばこの情報には意味がないことを表します。

プログラム 例

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

int main()
{
  time_t      timep;
  struct tm   *time_inf;

  /* 紀元からの経過秒数を得る */
  timep = time(NULL);

  /* 協定世界時(UTC)へ変換 */
  time_inf = gmtime(&timep);
  printf('UTC:%s', asctime(time_inf));

  /* ローカル標準時へ変換 */
  time_inf = localtime(&timep);
  printf('JST:%s', asctime(time_inf));

  return 0;
}

例の実行結果

$ date
2008年  7月 24日 木曜日 10:42:28 JST
$
$ ./localtime.exe
UTC:Thu Jul 24 01:42:32 2008
JST:Thu Jul 24 10:42:32 2008
$