>> C言語関数一覧トップに戻る
今回はC言語のmktime関数の使い方について説明します。
mktime関数はtm構造体をtime_t構造体に変換する関数です。
■書式
#include <time.h>
time_t mktime(struct tm *tp);
tm構造体は以下のようになっています。
struct tm {
int tm_sec; 秒 [0-61]
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:月→2:火・・・]
int tm_yday; 年間日数 [0-365] ※0から始まる
int tm_isdst; 夏時間フラグ。無効なら0
};
■サンプルコード
2014年1月29日10時をtime_t型で表示→1390957200
time_t型は1970年 1月 1日の00:00:00からの経過時間を秒数で表したものなので、
time_t型の状態で見ると何の数字なのかよくわかりません。
また、上記コードではtm構造体の曜日を表すtm_wdayや年間日数tm_ydayに値を入れていませんが、
mktime関数を実行しても問題なく動作します。
そのmktime関数で取得したtime_t型の値を再度localtime関数でtm構造体に変換してしまえば、
先ほど代入していなかった曜日や年間日数の値が入った状態でtm構造体を取得できます。
つまり、曜日や年間日数がわからないときはわかるところだけ入れて、
mktime関数→localtime関数で変換してやれば曜日や年間日数を求めることができるわけです。
この小技は結構使うので覚えておくと良いです。
>> 【C言語 time 使い方】に進む
>> C言語関数一覧トップに戻る
C言語 mktime 使い方
mktime関数はtm構造体をtime_t構造体に変換する関数です。
■書式
#include <time.h>
time_t mktime(struct tm *tp);
tm構造体は以下のようになっています。
struct tm {
int tm_sec; 秒 [0-61]
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:月→2:火・・・]
int tm_yday; 年間日数 [0-365] ※0から始まる
int tm_isdst; 夏時間フラグ。無効なら0
};
■サンプルコード
#include <time.h> #include <stdio.h> int main(void) { time_t tt; tm jikan; //2014年1月29日10時丁度 jikan.tm_year = 114; jikan.tm_mon = 0; jikan.tm_mday = 29; jikan.tm_hour = 10; jikan.tm_min = 0; jikan.tm_sec = 0; //time_t構造体に変換 tt = mktime(&jikan); printf("2014年1月29日10時をtime_t型で表示→%d\n",tt); return 0; }■実行結果
2014年1月29日10時をtime_t型で表示→1390957200
time_t型は1970年 1月 1日の00:00:00からの経過時間を秒数で表したものなので、
time_t型の状態で見ると何の数字なのかよくわかりません。
また、上記コードではtm構造体の曜日を表すtm_wdayや年間日数tm_ydayに値を入れていませんが、
mktime関数を実行しても問題なく動作します。
そのmktime関数で取得したtime_t型の値を再度localtime関数でtm構造体に変換してしまえば、
先ほど代入していなかった曜日や年間日数の値が入った状態でtm構造体を取得できます。
つまり、曜日や年間日数がわからないときはわかるところだけ入れて、
mktime関数→localtime関数で変換してやれば曜日や年間日数を求めることができるわけです。
この小技は結構使うので覚えておくと良いです。
>> 【C言語 time 使い方】に進む
>> C言語関数一覧トップに戻る