1

我正在尝试创建一个程序,该程序需要两个军事时间的差异并获得它的时间差异。

Example:

**AM to PM**

Time 1: 0900

Time 2: 1730

Time Difference: 8 hours 30 minutes

**PM to AM**

Time 1: 1200

Time 2: 1100

Time Difference: 23 hours 0 minutes

使用几个 if than else 语句,我能够弄清楚如何将军事时间转换为标准时间,但我不知道如何去减去时间。我试图想出一种只用加法和减法在纸上处理的方法,但我还没有开发出一种适用于所有情况的方法。有什么帮助吗?

4

2 回答 2

2

一种选择可能是将时间分成两个元素,小时和分钟。

首先,花点时间,即。1730除以100。如果是整数或类似的,应该是17小时(它会自动向下取整)。

然后取 1730 并将其修改为 100 以获得 30 分钟。

int time1 = 900;
int time2 = 1730;
int diffHours = time2 / 100 - time1 / 100;
int diffMinutes = time2 % 100 - time1 % 100;

如果您不熟悉模数 (%),它只会返回两个数相除后的余数,因此 7 % 3 将是 1。

于 2013-02-02T22:27:14.073 回答
1

假设您的军事时间存储为int0000..2400 范围内的值,那么以下函数将返回两个此类值之间的差。

#include <cassert>

extern int timediff_minutes(int t1, int t2);

int timediff_minutes(int t1, int t2)
{
    assert(t1 >= 0 && t1 <= 2400);
    assert(t2 >= 0 && t2 <= 2400);
    assert(t1 % 100 < 60 && t2 % 100 < 60);
    int t1_mins = (t1 / 100) * 60 + (t1 % 100);
    int t2_mins = (t2 / 100) * 60 + (t2 % 100);
    return(t2_mins - t1_mins);
}

请注意,2400 可用于表示一天的结束 - 并且 ISO 8601:2004 认可使用 2400数据元素和交换格式 - 信息交换 - 日期和时间的表示

4.2.3 午夜

根据 4.2.2,午夜的基本和扩展格式的完整表示应以下列两种方式之一表示:

    Basic format    Extended format
 a) 000000          00:00:00       (the beginning of a calendar day)
 b) 240000          24:00:00       (the end of a calendar day)

根据 4.2.2.3,表示可能具有降低的精度,或者可以根据 4.2.2.5 指定为时间表达式。为了表示午夜,可以根据 4.2.2.4 用仅包含零的小数来扩展表示。

注 1 午夜通常表示为 [00:00] 或 [24:00]。
注 2 一个日历日的结束 [24:00] 与下一个日历日的开始 [00:00] 重合,例如 1985 年 4 月 12 日的 [24:00] 与 13 日的 [00:00] 相同1985 年 4 月。如果与日期或时间间隔没有关联,则 a) 和 b) 在 24 小时计时系统中表示相同的本地时间。
注 3 表示 a) 或 b) 的选择将取决于与日期或时间间隔的任何关联。[hh] 具有值 [24] 的表示仅优选表示根据 4.4 的时间间隔的结束或根据 4.5 的重复时间间隔。

于 2013-02-02T22:30:16.550 回答