1、头文件
#include <atltime.h>
2、崩溃原因
取值范围越界导致,比如 CTime ct(3001,1,1,0,0,0);就会导致崩溃
范围如下:
nYear
1970-3000
nMonth
1-12
nDay
1-31
nHour
0-23
nMin
0-59
nSec
0-59
3、解决方案
使用CTime的时候先进行有效性检查,比如时间有效性检查函数
bool CDBBagInfoControl::bCheckDate(int year, int month, int day)
{
time_t time_tmp;
struct tm tm_new;
struct tm *tm_old;
if(year < 1900 || month <= 0 || month > 12 || day <= 0 || day > 31)
{
return false;
}
tm_new.tm_year = year - 1900;
tm_new.tm_mon = month - 1;
tm_new.tm_mday = day;
tm_new.tm_hour = 0;
tm_new.tm_min = 0;
tm_new.tm_sec = 0;
time_tmp = mktime(&tm_new);
if (time_tmp == -1)
{
return false;
}
tm_old = localtime(&time_tmp);
if(tm_old->tm_year != year - 1900 || tm_old->tm_mon != month - 1 || tm_old->tm_mday != day)
{
return false;
}
else
{
return true;
}
}