時間関連の関数

プログラミングをしていると、現在の日付とか時間が知りたいことがよくあります。これは、どうしたらよいでしょうか。これには、time 関数を使います。
time_t time(
            time_t *timer                                                                 
);
timer には、時刻の格納場所へのポインタを指定します。不要であれば NULL を指定してもかまいません。戻り値は、1970年1月1日からの経過時間(秒)で、時差を考慮されていません。time_t 型は time.h の中で定義されています。時差を考慮した時刻を取得するには localtime 関数を使います。

localtime 関数

struct tm *localtime(
                     const time_t *timer                                                  
);
timer には、格納されている時刻へのポインタを指定します。戻り値は tm 構造体へのポインタです。tm 構造体は time.h の中で次のように定義されています。
struct tm {
        int     tm_sec;         /* seconds after the minute [0-60] */
        int     tm_min;         /* minutes after the hour [0-59] */
        int     tm_hour;        /* hours since midnight [0-23] */
        int     tm_mday;        /* day of the month [1-31] */
        int     tm_mon;         /* months since January [0-11] */
        int     tm_year;        /* years since 1900 */
        int     tm_wday;        /* days since Sunday [0-6] */
        int     tm_yday;        /* days since January 1 [0-365] */
        int     tm_isdst;       /* Daylight Savings Time flag */
        long    tm_gmtoff;      /* offset from CUT in seconds */                          
        char    *tm_zone;       /* timezone abbreviation */
};
月は0 ~ 11 で表されるので、使う際には1を足してやる必要があります。年については、1900を足すと西暦が求まります。
char *asctime(
              const struct tm *timeptr                                                    
);

ソースコード

源文件
  1|/* time01.c */
  2|
  3|#include <stdio.h>
  4|#include <time.h>
  5|
  6|int main(void)
  7|{
  8|  time_t orgtime;
  9|  struct tm *lpmytm;
 10|  char *today;
 11|
 12|  orgtime = time(NULL);
 13|  lpmytm = localtime(&orgtime);
 14|
 15|  printf("現在時刻は%02d時%02d分%02d秒\n",
 16|         lpmytm->tm_hour, lpmytm->tm_min, lpmytm->tm_sec);
 17|  printf("今日は%d年%02d月%02d日\n",
 18|         lpmytm->tm_year + 1900, lpmytm->tm_mon + 1,                                  
 19|         lpmytm->tm_mday);
 20|
 21|  today = asctime(lpmytm);
 22|  printf("%s", today);
 23|  return 0;
 24|}

実行結果

現在時刻は160127秒
今日は201103月09日
Wed Mar  9 16:01:27 2011


Chapter10 @ C言語目録 @ HomeWork List @ 昭亮's Homepage