iikagenlabo

興味のあることを良い加減で研究していきます

M5Stackで指定時刻を過ぎたか調べる

NTPで時刻合わせをしたら、指定時刻になったら何かを処理させたいところですよね。 前回紹介したLocalClockクラスを使えば、checkTime()メソッドで指定時刻になったかどうかが調べられます。

指定時刻になったかどうかを調べるには、一定間隔で時刻を取得して過ぎているかどうかで分かります。 処理自体は簡単ですが、時間表現が関数によってちがい地味にめんどくさかったので紹介します。

まず、時間の差分を求めるにはtime.hにあるdifftime()という関数を使います。 これはtime_tを引数に取り、時間差を秒単位のdouble型で返します。

double difftime(time_t const time1, time_t const time2);

ここで time_t で時間を渡せば良いのですが、getLocalTime()で取得できる時間は struct tm です。 そこでmktime()を使って struct tm から time_t に変換します。

time_t mktime(struct tm* const time);

こうして time_t に変換した時間を使って指定時刻と現在の時刻の差分を取り、経過したかどうかを調べます。 time_t はただの数値で人が直接見ても理解することができません。 通常時間を扱うには struct tm の方が良いですね。