Chinaunix首页 | 论坛 | 博客
  • 博客访问: 567491
  • 博文数量: 493
  • 博客积分: 2891
  • 博客等级: 少校
  • 技术积分: 4960
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-17 17:11
文章分类

全部博文(493)

文章存档

2010年(493)

分类:

2010-05-12 18:31:39

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) |
给主人留下些什么吧!~~