【发布时间】:2010-12-14 07:14:52
【问题描述】:
继续my attempt to create a DateTime class,我正在尝试将“纪元”时间存储在我的函数中:
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)(1970 年 1 月 1 日凌晨 12:00:00),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() 只会搞乱时代?我应该如何解决/解决这个问题?
谢谢!
【问题讨论】: