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

//【函数功能】:对比两个时间点的大小,时间格式形如("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);

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

  首先解析字符串,获取年月日时分秒各项数值。然后按照先比较年月日,再比较时分秒的办法进行比较。如果大于则返回1,如果小于返回0,如果等于返回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;//到这里必然是相等了
}

温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-09

有这么复杂么 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;}

本回答被网友采纳

c\/c++ 两个时间大小比较
两个时间大小的比较方法描述如下:首先解析字符串,获取年月日时分秒各项数值。然后按照先比较年月日,再比较时分秒的办法进行比较。如果大于则返回1,如果小于返回0,如果等于返回2。这里面需要利用到两个知识点:比较年月日,可以先将年月日整合为一个整数,然后比较整数即可比较出年月日的大小 sscanf...

C语言的比较两个时间的函数
1、方法一:若时间为结构体变量,比较两个时间的大小,而且不能改变时间的值,可以是:int timecmp(date_t* date1,date_t* date2){ if(date1-> year==date1-> year)return memcmp(date1, date2,sizeof(date_t));else return date1-> year-date2-> year } 2、方法二:long getTime...

C++中怎么计算两个时间的时间差???
有两种思路: 第一种是很直观的算法,比如说从2005年4月3日-2017年6月27日。第一步先算2005年4月3日到2005年12月31日有几天,第二步算2006年到2016年共有几个完整年合计多少天,第三步算2017年1月1日到2017年6月27日有几天,最后把三个相加起来就行了。这里面必须考虑如果起止日期是...

我需要用c\/c++实现计算两个系统时间的间隔的程序,请教大家,非常感谢...
t1b=GetTickCount()-t1a;\/\/for(int j=0;j<max;++j) cout<<a[j]<<" ";(该段代码如果你只是计算时间的话可以不写)cout<<endl<<"It takes"<<t1b<<"ms to finish the sort"<<endl;return 0;}

C,C+和C++它们有什么区别
1、出现时间不同 C++是C的超集,也可以说C是C++的子集,因为C先出现。按常理说,C++编译器能够编译任何C程序,但是C和C++还是有一些小差别。例如C++增加了C不具有的关键字。这些关键字能作为函数和变量的标识符在C程序中使用,尽管C++包含了所有的C,但显然没有任何C++编译器能编译这样的C程序。2、...

C++问题~比较两个数大小
这显然不合该程序的想法。在c\/c++中,判断两者是否相等的运算符是==(即两个等号)。a==b:若a、b值相等,则该表达式值为1(即true),否则为0(fause)。楼主需要注意,程序语言和数学语言是不太一样的,将两者搞混对初学者来说是经常犯的错误,这需要平时多练习,养成检查代码的好习惯,慢慢就会理解程序...

C++怎么取当前时间和设定时间做比较?
\/\/时间比较:-1为第一个时间早,0相等,1为第一个时间晚于第二个时间 LONG lRet = CompareFileTime(&fileTimeLocal,&fileTimeVersion);if(lRet==-1){ return true;\/\/当本地文件最后修改时间比配置文件所取时间小 则返回true 相等则返回false } return false;} 这是我以前写的一段代码 希望能...

C++程序,比较两个数的大小,然后输出最大数,求它的平方,问题是,运行...
值分别赋给双精度浮点变量a,b ②求两个数中比较大的一个,赋给双精度浮点变量c ③输出 c 的算数平方根 没有涉及到输出最大的数,如果想要在” cout<<"the squart of maximum="<<sqrt(c)<<endl;“前加上" cout<<"the square of maximum="<<c*c<<endl;"同时不明白问题的意思 ...

c++比较两个字符串大小。。。哪里错了
while 条件中, *s++ 和 *t++ 相比较,取值之后,s和t分别已经+1了,此时再结束while之后的时候,*s 和 *t 已经不能得出大小比较的结果了,稍后举例给你 --- 例如:以下两个字符串,"abcde" 和 "abdce",正确的比较结果应该是 -1,而实际运行过程中,*s和*t在指向2号位置(c 和 d)...

编写c++程序实现比较两个分数大小的功能。要求:调用函数先比较两个数...
{ cout<<"数据错误,无法比较!"<<endl;return 0;} if(a.denominator!=b.denominator){ a.numerator*=b.denominator;b.numerator*=a.denominator;} if((a.numerator*a.flag)<(b.numerator*b.flag))rst=-1;else if((a.numerator*a.flag)>(b.numerator*b.flag))rst=1;return rst;} ...

相似回答