1 现象:问题描述
在针对XX版本中一个判断时间是否有效的函数的测试中,发现输入同样的时间值,如果当前系统是夏令时,则返回该时间无效,当系统是非夏令时,则返回时间有效;系统平台是IBM AIX。
2 关键过程:根本原因分析
函数实现如下:
int CDateTime::isValid(char *szIn)
{
//校验函数.
char szTmp[15];
char szChar[20];
struct tm tm1 = {0,0,0,0,0,0,0,0};
if(strlen(szIn)>14)
return 0;
strcpy(szChar,szIn);
strToTime(szChar,& tm1);
convert(&tm1,szTmp);
if(strcmp(szIn,szTmp) == 0)
{
return 1;
}
return 0;
}
其中strToTime函数是把"yyyymmddhhmiss"型字符串转化为时间结构.
int CDateTime::strToTime(char *szChar,struct tm * tm1)
{
//把"yyyymmddhhmiss"型字符串转化为时间结构.
int nYear;
int nMonth;
int nDay;
int nSecond;
int nMinutes;
int nHours;
char szTmp[5];
strncpy(szTmp,szChar,4);
szTmp[4] = 0;
nYear = atoi(szTmp);
strncpy(szTmp,szChar+4,2);
szTmp[2] = 0;
nMonth = atoi(szTmp);
strncpy(szTmp,szChar+6,2);
szTmp[2] = 0;
nDay = atoi(szTmp);
strncpy(szTmp,szChar+8,2);
szTmp[2] = 0;
nHours = atoi(szTmp);
strncpy(szTmp,szChar+10,2);
szTmp[2] = 0;
nMinutes = atoi(szTmp);
strncpy(szTmp,szCchar+12,2);
szTmp[2] = 0;
nSecond = atoi(szTmp);
//写tm结构.
tm1->tm_year = nYear - 1900;
tm1->tm_mon = nMonth - 1;
tm1->tm_mday = nDay;
tm1->tm_hour = nHours;
tm1->tm_min = nMinutes;
tm1->tm_sec = nSecond;
if(mktime(tm1) == -1)
{
return -1;
}
return 1;
}
阅读(220) | 评论(0) | 转发(0) |