军事时间的C ++时差

时间:2013-02-02 22:13:22

标签: c++

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

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 if else语句,我能够弄清楚如何将军事时间转换为标准时间,但我仍然坚持如何减去时间。我试图通过加法和减法来提出一种在纸上的方法,但我还没有开发出适用于所有情况的方法。有帮助吗?

2 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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。为了表示午夜,表示可以用a扩展   小数部分仅包含符合4.2.2.4的零。

     

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