定义一个表示日期、时间的结构体,输入任意两个时间,计算两个时间的时间差(天、 小时、分钟、秒、ms)
2条回答 默认 最新
- 技术专家团-小桥流水 2023-01-01 12:17关注
同一转换成毫秒计算差值,然后再转成天、小时、分钟、秒、毫秒。
两个测试运行结果:代码:
#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> typedef struct _date { int year, mon, day; int hour, min, sec; int ms; }Date; //判断是否是闰年 int isleapyear(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) return 1; else return 0; } //计算两个日期之间相差的毫秒数 long long cmp(Date d1, Date d2) { int mon[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; long long sec = 0; long long n1 = 0, n2 = 0; int i; Date t; if (d1.year > d2.year) { t = d1; d1 = d2; d2 = t; } if (isleapyear(d1.year)) mon[2] = 29; //计算d1本年已经过了多少秒 for (i = 0; i < d1.mon; i++) n1 += mon[i]; n1 = n1 * 24* 3600; //转成秒数 n1 = n1 + (d1.day - 1) * 24 * 3600 + d1.hour * 3600 + d1.min * 60 + d1.sec; //转毫秒 n1 = n1 * 1000 + d1.ms; //计算d2到d1的差值 for (i = d1.year; i < d2.year; i++) { if (isleapyear(i)) n2 += 366; else n2 += 365; } if (isleapyear(d2.year)) mon[2] = 29; else mon[2] = 28; for (i = 0; i < d2.mon; i++) { n2 += mon[i]; } n2 += d2.day - 1; //得到天数 n2 = n2 * 24 * 3600 + d2.hour * 3600 + d2.min * 60 + d2.sec; //得到秒数 //转毫秒 n2 = n2 * 1000 + d2.ms; sec = n2 - n1; return sec; //返回两者差的毫秒数 } int main() { Date d1, d2; long long s = 0; int day, hour, min, sec, ms; printf("请输入时间1的年 月 日 时 分 秒 毫秒:"); scanf("%d %d %d %d %d %d %d", &d1.year, &d1.mon, &d1.day, &d1.hour, &d1.min, &d1.sec,&d1.ms); printf("请输入时间2的年 月 日 时 分 秒 毫秒:"); scanf("%d %d %d %d %d %d %d", &d2.year, &d2.mon, &d2.day, &d2.hour, &d2.min, &d2.sec,&d2.ms); s = cmp(d1,d2); ms = s % 1000; //毫秒数 s = s / 1000; //转成秒 //计算天 day = s / (24 * 3600); s -= day * 24 * 3600; //计算小时 hour = s / 3600; s -= hour * 3600; //计算分钟 min = s / 60; s -= min * 60; //计算秒 sec = s; printf("两个时间的时间差:%d天%d小时%d分钟%d秒%dms", day, hour, min, sec, ms); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
- ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
- ¥15 手机接入宽带网线,如何释放宽带全部速度
- ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
- ¥15 ETLCloud 处理json多层级问题
- ¥15 matlab中使用gurobi时报错
- ¥15 这个主板怎么能扩出一两个sata口
- ¥15 不是,这到底错哪儿了😭
- ¥15 2020长安杯与连接网探
- ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么