“你要判断mktime的返回值,如果返回-1就是没有成功。 ”

long getTimeInterval(const char *t1, const char *t2) {
struct tm tm1, tm2;
time_t start, end;
double diff;
memset(&tm1, 0, sizeof(tm1));
memset(&tm2, 0, sizeof(tm2));
strptime(t1, "%Y%m%d", &tm1);
start = mktime(&tm1);
strptime(t2, "%Y%m%d", &tm2);
end = mktime(&tm2);
diff = difftime(start, end);
return d2l(diff);
}

调用:
printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20110326"));
printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20990326"));
第一行输出:[-8208000]
第二行输出:[1292860801]
对于这种两个日期时间比较的问题,第二行的比较结果是错误的,为什么呢?谢谢!
那对于这种情况还有办法判断么?谢谢!

这个没有办法,只能自己写代码处理。好像64位系统就可以处理大的时间范围。
VC里有time64_t。

幕布斯7119047
浏览 296回答 3
3回答

蛊毒传说

 1、方法一:若时间为结构体变量,比较两个时间的大小,而且不能改变时间的值,可以是:  int timecmp(date_t* date1,date_t* date2){if(date1-> year==date1-> year)return memcmp(date1, date2,sizeof(date_t));elsereturn date1-> year-date2-> year}  2、方法二:  long getTimeInterval(const char *t1, const char *t2) {struct tm tm1, tm2;time_t start, end;double diff;memset(&tm1, 0, sizeof(tm1));memset(&tm2, 0, sizeof(tm2));strptime(t1, "%Y%m%d", &tm1);start = mktime(&tm1);strptime(t2, "%Y%m%d", &tm2);end = mktime(&tm2);diff = difftime(start, end);return d2l(diff);}调用:  printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20110326"));printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20990326"));第一行输出:[-8208000]第二行输出:[1292860801]  3、补充:C语言时间函数: (1)、获得日历时间函数:  可以通过time()函数来获得日历时间(Calendar Time),其原型为:time_t time(time_t * timer);  如果已经声明了参数timer,可以从参数timer返回现在的日历时间,同时也可以通过返回值返回现在的日历时间,即从一个时间点(例如:1970年1月1日0时0分0秒)到现在此时的秒数。如果参数为空(NUL),函数将只通过返回值返回现在的日历时间,比如下面这个例子用来显示当前的日历时间:  (2)、获得日期和时间函数:  这里说的日期和时间就是平时所说的年、月、日、时、分、秒等信息。从第2节我们已经知道这些信息都保存在一个名为tm的结构体中,那么如何将一个日历时间保存为一个tm结构的对象呢?  其中可以使用的函数是gmtime()和localtime(),这两个函数的原型为:  struct tm * gmtime(const time_t *timer);  struct tm * localtime(const time_t * timer);  其中gmtime()函数是将日历时间转化为世界标准时间(即格林尼治时间),并返回一个tm结构体来保存这个时间,而localtime()函数是将日历时间转化为本地时间。比如现在用gmtime()函数获得的世界标准时间是2005年7月30日7点18分20秒,那么用localtime()函数在中国地区获得的本地时间会比世界标准时间晚8个小时,即2005年7月30日15点18分20秒。

喵喵时光机

printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20110326"));printf("getTimeInterval=[%ld]\n", getTimeInterval("20101221", "20990326"));第一行输出:[-8208000]第二行输出:[1292860801]

RISEBY

int timecmp(date_t* date1,date_t* date2){if(date1-> year==date1-> year)return memcmp(date1, date2,sizeof(date_t));elsereturn date1-> year-date2-> year}
打开App,查看更多内容
随时随地看视频慕课网APP