C语言判断两个日期大小

long d2l(double x) {
if (x >= 0) return (long) (x+0.5);
return (long) (x-0.5);
}
long getTimeInterval(const char *t1, const char *t2) {
struct tm tm1, tm2;
time_t start, end;
double diff;
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);
}

以上两个函数用于判断两个yyyymmdd格式的日期的大小,但发现使用getTimeInterval()时获得的结果:
t1=[20101221],t2=[20110326],getTimeInterval=[-8208000]
t1=[20101221],t2=[20990326],getTimeInterval=[1292860801]
t1=[20101221],t2=[20090326],getTimeInterval=[54864000]
结果没有规律?请问上述算法有何不对?谢谢!
您是指:
if (x >= 0) return (long) (x+0.5);
return (long) (x-0.5);
这个可以不写吧

似乎用strcmp("20101221", "20090326")或strcmp("20101221 09:00", "20101221 09:15")这样也能比较出两个时间的大小?这是为什么呢?

memset是不能初始化tm1和tm2的。

  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秒。
温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2016-10-07
应该是你没对tm1和tm2出示化,导致里面的数据是随即的,所以得到的结果不正确吧,我的运行每次都是-8208000(当然是memset过tm1和tm2的)

只要是在内存中的数据都是可以初始化的.
memset(&tm1, 0,sizeof(struct tm));本回答被提问者采纳
第2个回答  2010-12-23
程序没有问题,可以正确输出较大的数(特别注意一点:由于你的scanf()中的格式控制符是用逗号分隔的,所以在输入数字时也要用逗号分隔),至于你说的“稳定显示出来...执行完毕后按任意键继续”这个问题只需要包含头文件stdlib.h之后在main()结尾,return 0;之前加上system("pause");即可,原程序按此做如下修改:

//---------------------------------------------------------------------------

#include<stdio.h>
#include <stdlib.h>
int main(void)
{
int x,y,max;
printf("please input x,y=");
scanf("%d,%d",&x,&y);
if(x>y)
max=x;
else
max=y;
printf("the max is=%d\n",max);
system("pause");
return 0;
}
//---------------------------------------------------------------------------
第3个回答  推荐于2017-12-16
这样并没有比较日期的大小,而是比较的字符串的大小。本回答被网友采纳
第4个回答  2010-12-21
else没写

...+以mm\/dd\/yyyy的格式输入两日期,判断两个日期大小并按升序输出?_百 ...
\/\/ 输入第一个日期 printf("Enter date in mm\/dd\/yyyy format: "); scanf("%d\/%d\/%d", &month1, &day1, &year1);\/\/ 输入第二个日期 printf("Enter another date in mm\/dd\/yyyy format: "); scanf("%d\/%d\/%d", &month2, &day2, &year2);\/\/ 判断两个日期的大小 if (...

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语言比较当前系统日期与我输入的日期大小怎么写代码?
include #include <stdio.h>void main(void){time_t timep;struct tm *p;int in_time[3];intnow_time[3];int i;printf("输入年-月-日: ");scanf("%d-%d-%d", &in_time[0], &in_time[1], &in_time[2]);time (&timep);p=gmtime(&timep);now_time[0]=1900+p->tm_year;...

C语言计算两个时间差
下面,通过流程图展示计算过程。首先,通过函数`CompareDate()`比较日期,确保第一个日期始终不大于第二个日期。然后,使用`SwapDate()`函数交换日期,以确保计算逻辑的正确性。在计算日期间隔时,使用函数`NumberOfDaysBetween()`。此函数先判断两个日期是否在同一年内。若在同一年内,根据月份是否相同决定...

c语言如何计算两个时间相差多少
time.c 定义一个结构体实现两个时间的加减 \/ include<stdio.h> include<string.h> typedef struct { int seconds;int minutes;int hours;}Time;int checkTime(Time time);void printTime(Time time);void swap(Time *time1,Time *time2);\/\/大的时间放在前面 Time subtract1(Time *first,Time ...

请输入甲乙两个人的生日,判断并输出甲乙谁的年龄大,大多少,c语言
scanf("%d%d%d",&y1,&m1,&d1);printf("请输入乙的出生年月日yyyy m d:");scanf("%d%d%d",&y2,&m2,&d2);printf("请输入当天日期yyyy m d:"); \/\/这是为了计算过了生日,就增加1岁 scanf("%d%d%d",&y,&m,&d);nl1=y-y1-1+(m1<m||m1==m&&d1<=d);nl2=y-y2-1+...

用C语言实现计算两个日期的天数差值
实现C语言计算两个日期天数差值的主要步骤包括:日期判断、年份差值计算、年份天数统计和最终结果计算。具体步骤如下:1. 输入日期:首先获取日期①(year, month, day)和日期②(year1, month1, day1)。日期输入后进行初步检查,确保数据有效性。2. 年份差值计算:比较两个日期年份大小,确定较大年份...

C语言判断两个日期的前后问题
这是编译器的判断逻辑),编译器不会根据你上下文去统计逻辑的,因此会认为你if有返值,没有else语句中的返值。你将两个逻辑中的连续if改成if else应该就没问题了。其实,如果年月日的规则是严格的,那么语句不用这么麻烦,直接判断 year*365+month*30+day 的大小即可判定两个日期的关系了。

【C语言程序设计】日期函数,日期处理函数!
定义结构体 Date 表示日期,包含年、月、日三个整型成员。设计函数计算特定日期是一年中的第几天,考虑是否为闰年决定二月天数。编写函数比较两个日期的大小,按年、月、日顺序比较。创建函数计算两个日期之间的天数,通过比较函数和计算一年中的天数。实现 yearday() 函数计算一年的总天数,monthday() ...

C语言计算两个时间差
C语言通过一系列逻辑判断和计算,实现了比较并计算两个日期之间的天数差。首先,程序会根据日期的大小进行交换,然后根据日期的年份、月份和日期逐层计算间隔天数,考虑了闰年的特殊处理。以下是详细的步骤和代码片段: 结构体定义:c struct date{ int year;int month;int day;};比较和交换日期函数:...

相似回答