结构体-时间的计算

任务描述

本关任务需要你编写函数计算一个时间之前“xx小时xx分xx秒”的时间是多少。 以24小时制的格式记录当前时间,譬如“09:19:52”,表示上午9点19分52秒,则“1小时20分30秒”前的时间应该是“同一天”的“07:59:22”。 提示:先计算秒,再计算分,最后计算时间。例如计算“09:19:52”前“1小时20分30秒”的方法是: 秒:52−30=22,借0 分:19−20−0+60=59,借1 时:9−1−1=7,借0

编程要求

根据提示,在右侧完成函数BeforTime,在主函数中读入一个时间(合法的时间)time,再读入一个时段值duration("xx:xx:xx"),然后调用所写的函数计算time时刻duration的时间。

同时,要求定义结构体类型表示时间。

测试说明

平台会对你编写的代码进行测试: 测试样例1: 输入: 09:19:52 1:15:30 输出: Before: 同一天, 08:04:22

测试样例2: 输入: 00:19:52 1:20:30 输出: Before: 前1天, 22:59:22

测试样例3: 输入: 00:19:52 25:30:59 输出: Before: 前2天, 22:48:53

`tm` 结构体是 C/C++ 编程语言中用于表示日期和时间的一个重要数据结构,它通常定义在 `<time.h>` 或者 `<ctime>` 头文件中。这个结构体包含了描述日历时间和时钟时间的各个字段。 以下是 `tm` 结构体的主要成员及其含义: 1. **秒 (`int tm_sec`)** - 范围为 0 到 61(包括闰秒的情况)。 2. **分钟 (`int tm_min`)** - 范围为 0 到 59。 3. **小时 (`int tm_hour`)** - 使用 24 小时制,范围为 0 到 23。 4. **一年中的第几天 (`int tm_yday`)** - 范围从 0 到 365(平年)或 0 到 366(闰年),其中 0 表示一月一日。 5. **星期几 (`int tm_wday`)** - 范围是从 0 到 6,对应于周日至周六。 6. **月份 (`int tm_mon`)** - 范围是从 0 到 11,分别代表一月至十二月。 7. **年份 (`int tm_year`)** - 自公元 1900 年起计算的年数减去 1900 的值。例如,对于 2023 年来说,`tm_year = 123`。 8. **夏令时标志 (`int tm_isdst`)** - 如果存在夏令时则该值大于零;如果不存在夏令时,则等于零;如果是未知情况,则小于零。 通过 `mktime()` 函数可以将本地时间转换成基于纪元的时间戳 (自格林尼治标准时间 1970 年 1 月 1 日午夜以来所经过的秒数),反之亦然,可以用如 `localtime()`, `gmtime()` 等函数把时间戳转回 `tm` 格式。 ### 示例代码 ```c++ #include <iostream> #include <ctime> int main(){ time_t now; struct tm* ptm; // 获取当前时间 time(&now); // 将现在的时间转化为本地时间并存储到ptm指针指向的空间内 ptm = localtime(&now); std::cout << "现在的当地时间:" << (ptm->tm_year + 1900) << "-" // 计算完整年份 << (ptm->tm_mon + 1) << "-" // 加一是因为月份从0开始计数 << ptm->tm_mday << "\n" << " 时间:" << ptm->tm_hour << ":" << ptm->tm_min << ":" << ptm->tm_sec << std::endl; } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卑微的Coder

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值