定义一个表示日期、时间的结构体,输入任意两个时间,计算两个时间的时间差(天、 小时、分钟、秒、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 PointNet++的onnx模型只能使用一次
- ¥20 西南科技大学数字信号处理
- ¥15 有两个非常“自以为是”烦人的问题急期待大家解决!
- ¥30 STM32 INMP441无法读取数据
- ¥15 R语言绘制密度图,一个密度曲线内fill不同颜色如何实现
- ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
- ¥15 用visualstudio2022创建vue项目后无法启动
- ¥15 x趋于0时tanx-sinx极限可以拆开算吗
- ¥500 把面具戴到人脸上,请大家贡献智慧,别用大模型回答,大模型的答案没啥用
- ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。