为了账号安全,请及时绑定邮箱和手机立即绑定

请教关于c/c++ 两个时间大小比较

请教关于c/c++ 两个时间大小比较

C++
万千封印 2019-10-20 13:08:26
//【函数功能】:对比两个时间点的大小,时间格式形如("2015-08-06 09:32:60")//【返回 值】:str1比str2大返回1,str1比str2小返回0,相等返回2,错误返回-1
查看完整描述

2 回答

?
慕森王

TA贡献1777条经验 获得超3个赞

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

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

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

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

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

  代码实现如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

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;//到这里必然是相等了

}


 

 



查看完整回答
反对 回复 2019-10-21
?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

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;}


 




查看完整回答
反对 回复 2019-10-21
  • 2 回答
  • 0 关注
  • 329 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信