问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

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

提问网友 发布时间:2022-04-20 16:33
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
5个回答
热心网友 回答时间:2022-04-15 03:04

/**

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语言的最新标准,该标准更好的支持了汉字函数名和汉字标识符,一定程度上实现了汉字编程。



热心网友 回答时间:2022-04-15 04:22

任意输入两个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)

    {

测试:

热心网友 回答时间:2022-04-15 05:57
主要可以通过两种方法实现,第一种直接计算,第二种通过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有关)*/
};
热心网友 回答时间:2022-04-15 07:48
把t1和t2中间的时间全部折算成秒,然后使用秒数相减,最后折算回时分秒就行了。
热心网友 回答时间:2022-04-15 09:56
#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);

}

本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

相关推荐
  • 获取两个时间段之间相差多少小时多少分钟

    获取两个时间段之间相差多少小时多少分钟

    获取两个时间段之间相差多少小时多少分钟:获取两个时间段之间相差多少小时多少分钟,也可以修改此函数成相差多少天多少小时多少分钟多少秒等等。 无 获取两个时间段之间相差多少小时多少分钟,也可以修改此函数成相差多少天多少小时多少分钟多少秒等等。 .CodeEntity .code_piec
    查看详情
CUDA下,如何测试1MB的数据从主机内存传输到gpu全... 如何阅读源代码 c++中对string字符串做累加操作 如何编写一个PHP的C扩展 为什么下面的程序,执行调用函数和执行宏定义函数... cuda运行循环加法时间长 lua的string.format为什么比&quot;.&quot;慢 为什么从GraphicBuffer里memcpy拷贝数据效率特别低 请教关于函数Memcpy的耗时 中国移动手机营业厅怎么查询信用额度 手机号用了3年了,怎么固定信用额度还是0啊? 手机号码信用额度有什么用? 在哪看联通号码的信用额度? 电信手机卡信用额度? 联通手机卡信用额度是干嘛用的 手机号的信用度怎么查? 不懂手机卡信用额度40是什么意思? 手机话费的信用额度什么意思? 怎么查询自己号码的信用度额 怎么在网上查询手机的信用额度? c语言中时间更新怎么做 如何使用cudaMallocPitch和cudaMemcpy2D c/c++ 两个时间大小比较 android ffmpeg支持avi吗 编写一个C#程序,随机产生1000个整数存入数组中,... 能列举些C语言中比较常见重要库函数的用法吗? Linux下,和时间相关的几个函数 C语言free()释放动态内存时报错,研究好长时间也没... 红外光谱测试测试聚苯乙烯,为什么使用四氯化碳?... c语言 时间函数 四硫化碳的作用是什么 用C++编译程序时为什么我在里程,时间,平均速度后... 明天考试用急急急急! 在乙醇的四氯化碳溶液中,加... 光谱纯四氯化碳 能在红外测油仪上用么 请问用红外光谱可以分析出成分吗? [化学--选修有机化学基础]已知某种有机物A的质谱图... 溴的四氯化碳溶液能否氧化醛基? 初中化学 羧酸衍生物的红外光谱特征 如何做好一乙醇的红外光谱
Top