c语言如何计算两个时间相差多少

比如我想计算5:34:30到19:33:34 这之间经过了多少小时多少分钟,多少秒。现在我只能把时间print出来,请问接下来要怎么来计算时间差呢
#include <stdio.h>
int main()
{
struct time{
int hour;
int minute;
int second;
};
struct time t1,t2;
printf("please input the structure time1:");
scanf("%d %d %d",&t1.hour,&t1.minute,&t1.second);
printf("please input the structure time2:");
scanf("%d %d %d",&t2.hour,&t2.minute,&t2.second);
printf("t1=%d:%d:%d,t2=%d:%d:%d\n",t1.hour,t1.minute,t1.second,t2.hour,t2.minute,t2.second);

return 0;
}

多谢各位大神!

/**

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 *second);

Time subtract(Time *first,Time *second);//默认第一个时间比第二个大

int main()

{

Time time1;

Time time2;

Time time3;

char againch[5]="y";

while(strcmp(againch,"y")==0||strcmp(againch,"Y")==0)

int again=1;

while(again)

{

printf("输入时间1:");

scanf("%d:%d:%d",&time1.hours,&time1.minutes,&time1.seconds);

if(checkTime(time1))

{

printf("-----输入时间格式错误!请重新输入\n");

again=1;

}

else

again=0;

}

again=1;

while(again)

{

printf("输入时间2:");

scanf("%d:%d:%d",&time2.hours,&time2.minutes,&time2.seconds);

if(checkTime(time2))

{

printf("-----输入时间格式错误!请重新输入\n");

again=1;

}

else

again=0;

swap(&time1,&time2);

printf("           ");

printTime(time1);

printf(" - ");

printTime(time2);

time3=subtract(&time1,&time2);

printf(" = ");

printTime(time3);

printf("\n");

printf("继续[y/n]?:");

scanf("%s",againch);

}

return 0;

}

//检查时间的格式

int checkTime(Time time)

{

//    printf("小时格式错误:%d\n",(time.hours>=24||time.hours<0));

//    printf("分钟格式错误:%d\n",(time.minutes>=60||time.minutes<0));

//    printf("秒格式错误  :%d\n",(time.seconds>=60||time.minutes<0));

return ((time.hours>24||time.hours<0)||(time.minutes>=60||time.minutes<0)||(time.seconds>=60||time.minutes<0));

}

//输出按个数输出时间

void printTime(Time time)

{

printf("%d:%d:%d",time.hours,time.minutes,time.seconds);

}

//大的时间放到第一个变量,小的时间方法哦第二个变量

void swap(Time *time1,Time *time2)

{

//保证第一个时间永远大于第二个时间

if(time2->hours>time1->hours)//如果有time

{

//交换两个时间的小时

time2->hours^=time1->hours;

time1->hours^=time2->hours;

time2->hours^=time1->hours;

//交换两个时间的分钟:

time1->minutes^=time2->minutes;

time2->minutes^=time1->minutes;

time1->minutes^=time2->minutes;

//交换两个时间的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

}

else if(time2->minutes>time1->minutes&&time1->hours==time2->hours)

{

//交换两个时间的分钟:

time1->minutes^=time2->minutes;

time2->minutes^=time1->minutes;

time1->minutes^=time2->minutes;

//交换两个时间的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

}

else if(time2->seconds>time1->seconds&&time1->minutes==time2->minutes)

{

//交换两个时间的秒:

time1->seconds^=time2->seconds;

time2->seconds^=time1->seconds;

time1->seconds^=time2->seconds;

}

}

//计算两个时间的差

Time subtract(Time *first,Time *second)//默认第一个时间比第二个大

{

Time result;

//先对秒进行相减

if(first->seconds>=second->seconds)//如果第一个秒大于或者等于

{

result.seconds=first->seconds-second->seconds;

}

else//如果第一个的秒数小的话

{

first->minutes=first->minutes-1;//借位

first->seconds=first->seconds+60;

result.seconds=first->seconds-second->seconds;

}

//接着对分钟相减

if(first->minutes>=second->minutes)//如果第一个秒大于或者等于

{

result.minutes=first->minutes-second->minutes;

}

else//如果第一个的秒数小的话

{

first->hours=first->hours-1;//借位

first->minutes=first->minutes+60;

result.minutes=first->minutes-second->minutes;

}

//交换后 默认第一个小时会大于第一个,没有借位的情况,不用

result.hours=first->hours-second->hours;

return result;

拓展资料

C语言是一门通用计算机编程语言,应用广泛。C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言制定了一套完整的美国国家标准语法,称为ANSI C,作为C语言最初的标准。目前2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)发布的C11标准是C语言的第三个官方标准,也是C语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。



温馨提示:内容为网友见解,仅供参考
第1个回答  推荐于2019-10-19

任意输入两个24小时制的时间,输出两个时间的时间差

    return 0;

    }

    //检查时间的格式

    int checkTime(Time time)

    {

    //    printf("小时格式错误:%d\n",(time.hours>=24||time.hours<0));

    //    printf("分钟格式错误:%d\n",(time.minutes>=60||time.minutes<0));

    //    printf("秒格式错误  :%d\n",(time.seconds>=60||time.minutes<0));

    return ((time.hours>24||time.hours<0)||(time.minutes>=60||time.minutes<0)||(time.seconds>=60||time.minutes<0));

    }

    //输出按个数输出时间

    void printTime(Time time)

    {

    printf("%d:%d:%d",time.hours,time.minutes,time.seconds);

    }

    //大的时间放到第一个变量,小的时间方法哦第二个变量

    void swap(Time *time1,Time *time2)

    {

    //保证第一个时间永远大于第二个时间

    if(time2->hours>time1->hours)//如果有time

    {

    //交换两个时间的小时

    time2->hours^=time1->hours;

    time1->hours^=time2->hours;

    time2->hours^=time1->hours;

    //交换两个时间的分钟:

    time1->minutes^=time2->minutes;

    time2->minutes^=time1->minutes;

    time1->minutes^=time2->minutes;

    //交换两个时间的秒:

    time1->seconds^=time2->seconds;

    time2->seconds^=time1->seconds;

    time1->seconds^=time2->seconds;

    }

    else if(time2->minutes>time1->minutes&&time1->hours==time2->hours)

    {

测试:

本回答被网友采纳
第2个回答  推荐于2017-10-06
主要可以通过两种方法实现,第一种直接计算,第二种通过difftime
函数实现,具体代码如下,
//函数功能计算两个时间差,未考虑时间数据有效性
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(int argc, char *argv[])
{
struct time1{
int hour;
int minute;
int second;
};
struct time1 t1,t2;
struct tm *ptr1,*ptr2;
time_t lt;
time(<);//当前系统时间
ptr1=localtime(<);//返回指向当前时间的指针
ptr2=(struct tm *)malloc(sizeof(struct tm));//动态申请指针ptr2
memcpy(ptr2,ptr1,sizeof(struct tm));//复制ptr1
long diff=0;//存储时间差
//第一种方法,直接计算
printf("please input the structure time1:");
scanf("%d %d %d",&t1.hour,&t1.minute,&t1.second);
printf("please input the structure time2:");
scanf("%d %d %d",&t2.hour,&t2.minute,&t2.second);
printf("t1=%d:%d:%d,t2=%d:%d:%d\n",t1.hour,t1.minute,t1.second,t2.hour,t2.minute,t2.second);
diff=(t1.hour*3600+t1.minute*60+t1.second)-(t2.hour*3600+t2.minute*60+t2.second);
diff=(diff>0)?diff:(-1*diff);
printf("1. diff=%ld\n",diff);
//第二种方法,通过difftime计算
ptr1->tm_sec=t1.second;//更改当前时间为t1,struct tm结构其他成员不变
ptr1->tm_min=t1.minute;
ptr1->tm_hour=t1.hour;
ptr2->tm_sec=t2.second;//更改当前时间为t2
ptr2->tm_min=t2.minute;
ptr2->tm_hour=t2.hour;
diff=(long)difftime(mktime(ptr2),mktime(ptr1));
printf("2. diff=%ld\n",diff);
return 0;
}

double difftime( time_t time2, time_t time1 );函数返回时间参数time2和time1之差的秒数表示。
结构体tm定义如下,
struct tm {
int tm_sec; /* 秒–取值区间为[0,59] */
int tm_min; /* 分 - 取值区间为[0,59] */
int tm_hour; /* 时 - 取值区间为[0,23] */
int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */
int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
int tm_year; /* 年份,其值从1900开始 */
int tm_wday; /* 星期–取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 */
int tm_yday; /* 从每年的1月1日开始的天数–取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 */
int tm_isdst; /* 夏令时标识符,实行夏令时的时候,tm_isdst为正。不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负。*/
long int tm_gmtoff; /*指定了日期变更线东面时区中UTC东部时区正秒数或UTC西部时区的负秒数*/
const char *tm_zone; /*当前时区的名字(与环境变量TZ有关)*/
};
第3个回答  2014-11-16
把t1和t2中间的时间全部折算成秒,然后使用秒数相减,最后折算回时分秒就行了。
第4个回答  推荐于2017-09-12
#include <stdio.h>

struct time{

int hour;

int minute;

int second;

};

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

int sum1;

int sum2;

int sum;

struct time t1,t2;

printf("please input the structure time1:");

scanf("%d %d %d",&t1.hour,&t1.minute,&t1.second);

printf("please input the structure time2:");

scanf("%d %d %d",&t2.hour,&t2.minute,&t2.second);

printf("t1=%d:%d:%d,t2=%d:%d:%d\n",t1.hour,t1.minute,t1.second,t2.hour,t2.minute,t2.second);

sum1=(t1.hour)*60+(t1.minute)*60+t1.second;

sum2=(t2.hour)*60+(t2.minute)*60+t2.second;

sum=sum2-sum1;

if(sum<0){

sum=sum*(-1);

printf("%d",sum);

return 0;

}

printf("%d",sum);

}本回答被提问者和网友采纳

C语言计算两个时间差
为了计算两个日期之间的差异,首先需要明确思路与步骤。若第一个日期大于第二个日期,需将两者交换,以确保计算准确。计算日期间隔时,需区分不同情况,如同年同月则直接计算天数差,不同月则需加上月份间的天数,并参照月份天数数组相加;不同年则还需加上当年的天数,注意闰年的天数也需考虑。下面,...

C语言计算两个时间差
int i, days, extraDays;\/\/...详细计算过程,包括闰年判断和不同年份的天数累加 } 主函数获取用户输入并输出结果:c int main(){ int interval;\/\/...获取输入,调用CompareDate和NumberOfDaysBetween函数,输出相差天数 return 0;} 通过这些函数,程序实现了计算两个日期之间的天数差,并在C语言中实...

C语言两个日期之间相隔天数
输入两个日期,计算它们相隔的天数(两日期的先后顺序不一定)。实现思路如下:首先,设定第一个日期为A,第二个日期为B。根据日期的间隔情况,可以分为以下两种情况讨论:1. 当A在B之前时,计算B到A的天数作为间隔。2. 当A在B之后时,计算A到B的天数作为间隔。在实现程序流程图时,要先将日期转换...

如何用c语言计算两个时间的时间差??
printf("%ld", (end - start)\/CLK_TCK\/60);

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,...

C语言中计算2个时间的差值的函数
- 1; tm_t.tm_mday = day; tm_t.tm_hour = 12; tm_t.tm_min = 00; tm_t.tm_sec = 01; tm_t.tm_wday = 0; tm_t.tm_yday = 0; tm_t.tm_isdst = 0; return mktime( &tm_t );}int daydiff( char *date1, char *date2 )...

c语言怎么求两个日期相差的秒数,日期格式20140325150630和20140...
year - 1900; \/\/tm结构记录年为实际-1900 time_cha.tm_mon = month - 1;time_cha.tm_mday = day;time_cha.tm_hour = hour;time_cha.tm_min = min;time_cha.tm_sec = sec;t2 = mktime(&time_cha);d=t1-t2;\/\/经过的时间差(秒)printf("%ld\\n", d);return 0;} ...

C语言怎么把时间1和时间2换成分钟,再计算时间差?
unsigned int time1, time2, h, m;time1 = h1 * 60 + m1;time2 = h2 * 60 + m2;time1 = time1 > time2 ? time1 - time2 : time2 - time1;h = time1 \/ 60;m = time1 % 60;printf("时间差为%u小时%u分钟\\r\\n", h, m);...

C语言中用difftime计算两个时间差问题,求解!
你好。问题分析:time_t 只能表示从 1970年1月1日0时0分0秒 到此时的秒数,1970年1月1日0时0分0秒 以前的时间它是无法表示的。而 struct tm 的成员变量 tm_year 的值为实际年份减去 1900,你的程序中给 timeptr1.tm_year 和 timeptr2.tm_year 都赋值为 0,就相当于这两个时间都是 1900...

...怎样计算他们的时间差,结果还是这样表示。用c语言编辑
思路, 把时间都换成秒, 两者相减, 得到相差的秒数, 再转换成时间格式 char a[]="15:40:20";char b[]="14:33:11";int sum_a=0,sum_b=0;char ss[3]={"\\0"}; \/\/分别用ss字符串取出时,分,秒 int h,m,s;ss[0]=a[0];ss[1]=a[1];h=atoi(ss); \/\/字符串转换...

相似回答