C高手请进,比较两个时间先后的函数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C高手请进,比较两个时间先后的函数相关的知识,希望对你有一定的参考价值。

比如2011/09/20 08:12:12和2011/10/12 12:12:12,希望给出具体一点的代码!先感谢了!
注意一下,我的时间格式是2011.10.12 12:12:12,谢谢各位了。。。

/*
1) 如果时间字符串格式固定,可以直接按字符串比较大小的方法比较他们所表示对时间大小。这样比较容易。
2) 也可以根据时间字符串,提取年月日时分秒,再比较。这样可以获取时间的具体信息。对时间进行任意的操作而不限于比较。

下面是示例程序,用了上述两种方法:

*/
#include <stdio.h>
#include <string.h>
#include <time.h>

time_t trans(char timeForamt[],char strTime[])

/*
struct tm
int tm_sec; // seconds after the minute - [0,59]
int tm_min; // minutes after the hour - [0,59]
int tm_hour; // hours since midnight - [0,23]
int tm_mday; // day of the month - [1,31]
int tm_mon; // months since January - [0,11]
int tm_year; // years since 1900
int tm_wday; //days since Sunday - [0,6]
int tm_yday; // days since January 1 - [0,365]
int tm_isdst; // daylight savings time flag
;
*/

struct tm t;
sscanf(strTime,timeForamt,&t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec);
t.tm_year -= 1900;
t.tm_mon -= 1;
return mktime(&t);


int main(int argc, char *argv[])


char strT1[]="2011/09/20 08:12:12";
char strT2[]="2011/10/12 12:12:12";
time_t t1,t2;

// 由 strT1 转换成时间(距离: 1970 年 1 月 1 日过去的秒数)
t1 = trans("%d/%d/%d %d:%d:%d",strT1);
// 由 strT2 转换成时间(距离: 1970 年 1 月 1 日过去的秒数)
t2 = trans("%d/%d/%d %d:%d:%d",strT2);

/*
比较两个时间大小
*/

// 以字符串形式比较
if(strcmp(strT1,strT2)<0)

printf("%s 早于 %s\n",strT1,strT2);

else if(strcmp(strT1,strT2)==0)

printf("%s 和 %s 同时\n",strT1,strT2);

else

printf("%s 晚于 %s\n",strT1,strT2);


// 用秒数比较
if(difftime(t1,t2)<0)

printf("%s 早于 %s\n",strT1,strT2);

else if(difftime(t1,t2)==0)

printf("%s 和 %s 同时\n",strT1,strT2);

else

printf("%s 晚于 %s\n",strT1,strT2);

return 0;
参考技术A 为什么你们要把这么简单的题目复杂化呢?????
楼主你只要保证你所有的时间都是按照这个格式的话,就直接用strcmp()

char *a = "2011/11/20 08:12:12";
char *b = "2011/10/12 12:12:12";

int c = strcmp(a,b); 这个函数的原则就是每一个一个字节的比较2011/10就比2011/09大

为什么这么简单的楼上非要又换算时间咯又要干嘛的。???

如果你的时间格式不一定一样的话,就另当别论。追问

对了,你不说我还没注意,我的那个时间格式是2011.10.12 12:12:12,那应该怎么办呢?

追答

不是,我的意思是如果你要比较的2个时间他们的格式是一样的就肯定可以用strcmp去做。楼上还真是。。。自己说换算成计算机内部时钟,结果也是用strcmp....

2011.10.12 12:12:12 任意时间格式都行,只要你比较的两个是同一种格式就可以了。
其实很简单的,你可以用下strcmp试一下就晓得了

本回答被提问者采纳
参考技术B 换算成秒减去1970 看谁剩下的大

谁就最新时间

还可以直接用strcmp()
char *a = "2011/11/20 08:12:12";
char *b = "2011/10/12 12:12:12";
int c = strcmp(a,b); 这个函数的原则就是每一个一个字节的比较2011/10和2011/09

自然能得出哪个大

当然你要不嫌麻烦 全部 年减年 月减月 。。。。秒减秒 也行

有问题请追问 满意记得采纳
参考技术C #include <stdio.h>
#include <string.h>

int main(void)

char a[128] = 0, b[128] = 0;
int flag = 0;

printf("Plz input time 1:");
gets(a);
printf("Plz input time 2:");
gets(b);

flag = strncmp(a, b, 20);
if (flag > 0)
printf("time %s 比较早!\n", b);
else if (flag < 0)
printf("time %s 比较早!\n", a);
else
printf("相同的时间!\n");
return 0;

参考技术D 使用DateTime结构

丑陋的代码,自己看吧:
http://msdn.microsoft.com/zh-cn/library/03ybds8y(v=VS.80).aspx

以上是关于C高手请进,比较两个时间先后的函数的主要内容,如果未能解决你的问题,请参考以下文章

C语言高手请进

高分悬赏,c语言高手请进

软件开发高手请进!!!

C语言高手请进!!救急。。

一个C程序设计题,高手请进!

编程高手请进~~~~