c/c++ 两个时间大小比较

//【函数功能】:对比两个时间点的大小,时间格式形如("2015-08-0609:32:60")//【返回值】:str1比str2大返回1,str1比str2小返回0,相... //【函数功能】:对比两个时间点的大小,时间格式形如("2015-08-06 09:32:60")
//【返回 值】:str1比str2大返回1,str1比str2小返回0,相等返回2,错误返回-1
//【作 者】:nf
//【日 期】:2015/7/9
int CompareDate(const char * str1,const char * str2)
{
if (strlen(str1)< 19 || strlen(str2)< 19 )
{
return -1;
}
char pStr1[10], pStr2[10];
memset(pStr1,0,10);
memset(pStr2,0,10);
memcpy(pStr1,str1,4);
memcpy(pStr2,str2,4);
if (atoi(pStr1) == atoi(pStr2))
{
memset(pStr1,0,10);
memset(pStr2,0,10);
memcpy(pStr1,str1+5,2);
memcpy(pStr2,str2+5,2);
if (atoi(pStr1) == atoi(pStr2))
{
memset(pStr1,0,10);
memset(pStr2,0,10);
memcpy(pStr1,str1+5+3,2);
memcpy(pStr2,str2+5+3,2);
if (atoi(pStr1) == atoi(pStr2))
{
memset(pStr1,0,10);
memset(pStr2,0,10);
memcpy(pStr1,str1+5+3+3,2);
memcpy(pStr2,str2+5+3+3,2);
if (atoi(pStr1) == atoi(pStr2))
{
memset(pStr1,0,10);
memset(pStr2,0,10);
memcpy(pStr1,str1+5+3+3+3,2);
memcpy(pStr2,str2+5+3+3+3,2);
if (atoi(pStr1) == atoi(pStr2))
{
memset(pStr1,0,10);
memset(pStr2,0,10);
memcpy(pStr1,str1+5+3+3+3+3,2);
memcpy(pStr2,str2+5+3+3+3+3,2);
if (atoi(pStr1) == atoi(pStr2))
{
return 2;
}
return atoi(pStr1) > atoi(pStr2);

}
else
return atoi(pStr1) > atoi(pStr2);
}
else
return atoi(pStr1) > atoi(pStr2);
}
else
return atoi(pStr1) > atoi(pStr2);

}else
return atoi(pStr1) > atoi(pStr2);
}
else
return atoi(pStr1) > atoi(pStr2);
return -1;
}

调用方法
char str1[30] = "2015-08-06 09:32:60";
char str2[30] = "2015-04-06 09:32:59";
int n= CompareDate(str1,str2);
展开
 我来答
传薪网络
2015-11-16 · TA获得超过1355个赞
知道小有建树答主
回答量:635
采纳率:92%
帮助的人:242万
展开全部

  两个时间大小的比较方法描述如下:

  首先解析字符串,获取年月日时分秒各项数值。然后按照先比较年月日,再比较时分秒的办法进行比较。如果大于则返回1,如果小于返回0,如果等于返回2。

       这里面需要利用到两个知识点:

  1. 比较年月日,可以先将年月日整合为一个整数,然后比较整数即可比较出年月日的大小

  2. sscanf可以将字符串中的数值提取出来

  代码实现如下:

int compare(const char* time1,const char* time2)
{
    int year1,month1,day1,hour1,min1,sec1;
    int year2,month2,day2,hour2,min2,sec2;
    sscanf(time1,"%d-%d-%d %d:%d:%d",&year1,&month1,&day1,&hour1,&min1,&sec1);
    sscanf(time2,"%d-%d-%d %d:%d:%d",&year2,&month2,&day2,&hour2,&min2,&sec2);
    int tm1 = year1*10000+month1*100+day1;
    int tm2 = year2*10000+month2*100+day2;
    if(tm1!=tm2) return (tm1>tm2)?1:0;//如果相等,大返回1,小返回0
    tm1 = hour1*3600+min1*60+sec1;
    tm2 = hour2*3600+min2*60+sec2;//将时分秒转换为秒数
    if(tm1!=tm2) return (tm1>tm2)?1:0;//如果相等,大返回1,小返回0
    return 2;//到这里必然是相等了
}
skheda
2015-07-09 · TA获得超过165个赞
知道小有建树答主
回答量:156
采纳率:100%
帮助的人:81.7万
展开全部

有这么复杂么 char str1[30] = "2015-08-06 09:32:60";
char str2[30] = "2015-04-06 09:32:59";这个时间 是控件获取的还是手动输入的?

如果是控件获取的 一般是Ctime类型的,直接可以比较大小;如果手动输入的 可以转成Ctime类 然后再直接比较大小,再输入的时候 控制一下就可以了;

CTime timestr(LPSTR str)
{
 USES_CONVERSION;
 LPSTR strSQL=str;
 int nYear, nMonth, nDate, nHour, nMin, nSec;
 nYear=nMonth=nDate=nHour=nMin=nSec=0;
 sscanf(strSQL, "%d-%d-%d  %d:%d:%d", &nYear, &nMonth, &nDate, &nHour, &nMin, &nSec);    
 CTime t(nYear, nMonth, nDate, nHour, nMin, nSec);     
 return t;
}
然后调用这个 CTime t1=timestr("2015-08-06 09:32:60");
CTime t2=timestr("2015-04-06 09:32:59"); 
int i=0; 
if(t1>t2)
{
      i=1;
}  
else if(t2>t1)
{
      i=0;
}
else
{i=-1;}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式