军事时间的C++时差

C++ time difference in military time

本文关键字:C++ 时差 时间      更新时间:2023-10-16

我正在尝试创建一个程序,该程序将两个军事时间的差值计算出来。

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语句,我能够弄清楚如何将军事时间转换为标准时间,但我一直在思考如何减去时间。我正试图想出一种在纸上只做加法和减法的方法,但我还没有开发出一种适用于所有情况的方法。有什么帮助吗?

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

首先,计算时间,即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。

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

#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用于表示一天的结束,使用2400受到ISO 8601:2004数据元素和交换格式——信息交换——日期和时间的表示的认可。

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日与1985年4月份13日【00:00】相同。如果a)和b)都与日期或时间间隔没有关联表示24小时计时系统中的相同本地时间
注3表示a)或b)的选择将取决于与日期或时间间隔的任何关联。[hh]具有值[24]的表示仅优选表示根据4.4或4.5中规定的重复时间间隔。