Help us understand the problem. What is going on with this article?

[C言語] 時間を扱う

More than 3 years have passed since last update.

時間を扱うにはtime()関数などを利用します。

関数

time関数

引数のtimerに、暦時刻を格納します。時刻はグリニッチ標準時(GMT)の1970年 1月 1日の00:00:00 から現在までの経過時間を秒単位です。(エポック秒)
(戻り値も同じものを指します)

NULLを指定すると戻り値を返却するのみとなります。

#include <time.h>

time_t time(time_t *timer);

mktime関数

#include <time.h>

time_t mktime(struct tm *timeptr);

引数で渡されたstruct tm構造体の情報を元に、1970/1/1 0:00:00からの経過秒数を返します。
struct tm構造体はtime.hの中で以下のように宣言されています。

構造体 tm time.h の中で宣言され、以下の情報を含みます
struct tm {
  int tm_sec;      /* 秒 [0-61] 最大2秒までのうるう秒を考慮 */
  int tm_min;      /* 分 [0-59] */
  int tm_hour;     /* 時 [0-23] */
  int tm_mday;     /* 日 [1-31] */
  int tm_mon;      /* 月 [0-11] 0から始まることに注意 */
  int tm_year;     /* 年 [1900からの経過年数] */
  int tm_wday;     /* 曜日 [0:日 1:月 ... 6:土] */
  int tm_yday;     /* 年内の通し日数 [0-365] 0から始まることに注意*/
  int tm_isdst;    /* 夏時間フラグ [夏時間を採用しているときに正、採用していないときに 0、この情報が得られないときに負] */
};

difftime関数

#include <time.h>

double difftime(time_t time2, time_t time1);

time1からtime2までの時間差を秒数で返します。

localtime関数

#include <time.h>

struct tm *localtime(const time_t *timer);

timerに格納されているデータを現地時間(日本時間)に変換し、tm構造体に格納します。

asctime関数

#include <time.h>

char *asctime(const struct tm *tblock);

tblock構造体の時刻を文字列に変換します。

サンプル

とある日付から経過秒数を取得するサンプルです。

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

int main() {

    char *sample = "2015年04月15日00時43分";
    int year;
    int month;
    int hour;
    int day;
    int min;
    sscanf(sample, "%04d年%02d月%02d日%02d時%02d分", &year, &month, &day, &hour, &min);

    struct tm sampleDate;
    sampleDate.tm_sec   = 0;
    sampleDate.tm_min   = min;
    sampleDate.tm_hour  = hour;
    sampleDate.tm_mday  = day;
    sampleDate.tm_mon   = month - 1;
    sampleDate.tm_year  = year - 1900;
    sampleDate.tm_isdst = -1;

    time_t time = mktime(&sampleDate);

    printf("time: %ld\n", time);

    return 0;
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした