DateTime クラスを作成する試みを続けて、関数に「エポック」時間を格納しようとしています。
void DateTime::processComponents(int month, int day, int year,
int hour, int minute, int second) {
struct tm time;
time.tm_hour = hour;
time.tm_min = minute;
time.tm_sec = second;
time.tm_mday = day;
time.tm_mon = month;
time.tm_year = year - 1900;
ticks_ = mktime(&time);
processTm(time);
}
void DateTime::processTm(struct tm time) {
second_ = time.tm_sec;
minute_ = time.tm_min;
hour_ = time.tm_hour;
weekday_ = time.tm_wday;
monthday_ = time.tm_mday;
yearday_ = time.tm_yday;
month_ = time.tm_mon;
year_ = time.tm_year + 1900;
}
任意の日付processComponents(5,5,1990,1,23,45)
(1990 年 6 月 6 日午前 1 時 23 分 45 秒) に対して、すべての値が正しく期待どおりに設定されます。
processComponents(0,0,1970,0,0,0)
ただし、さらにテストすると、 for (January 1, 1970, 12:00:00 am) のmktime(&time)
原因time
が台無しになっていることがわかりました。
time.tm_mon = 11;
time.tm_mday = 30;
time.tm_year = 69;
time.tm_hour = 23;
time.tm_min = 0;
time.tm_sec = 0;
time.tm_isdst = 0;
time.tm_gmtoff = -18000;
time.tm_zone = "EST";
time.tm_wday = 2;
time.tm_yday = 363;
1969 年 12 月 31 日午後 11:00:00 の日付に変換します。
mktime()
その行をコメントアウトすることで、日付と時刻が 1970 年 1 月 1 日午前 12:00:00 として正しく報告されるため、それが原因であることを確認できます。
なぜmktime()
時代を台無しにするだけなのですか?そして、これをどのように修正/回避する必要がありますか?
ありがとう!