C 言語 の mktime が時々エラーを返却する
なんか知らんが以下のソースで時々時間が変になる。
原因がわからず悩んだが、結局のところ初期化してなかっただけ。
#include <stdio.h>
#include <time.h>
int main()
{
time_t now = time(NULL); // 現在時刻
struct tm _tm;
_tm.tm_year = 122; // 西暦から1900引いた値なので2022年は122っj
_tm.tm_mon = 2; // 月だが0始まり。3月は2
_tm.tm_mday = 10;
_tm.tm_hour = 0;
_tm.tm_min = 0;
_tm.tm_sec = 0;
time_t t = mktime(&_tm);
printf("%ld\n", t);
return 0;
}
で、これだと時々-1になる(エラーになる)ので、memsetで初期化した。
#include <stdio.h>
#include <time.h>
int main()
{
time_t now = time(NULL); // 現在時刻
struct tm _tm;
memset(&_tm, 0x00, sizeof(struct tm)); // ★初期化!
_tm.tm_year = 122; // 西暦から1900引いた値なので2022年は122っj
_tm.tm_mon = 2; // 月だが0始まり。3月は2
_tm.tm_mday = 10;
_tm.tm_hour = 0;
_tm.tm_min = 0;
_tm.tm_sec = 0;
time_t t = mktime(&_tm);
printf("%ld\n", t);
return 0;
らばっちり!もう起きない!
構造体のなかの設定してない変数、tm_ydayやらtm_isdstにクソみたいな値が入っていて結果NGになったんだろう。
初期化大事!
以上!