首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >军事时间中的C++时差

军事时间中的C++时差
EN

Stack Overflow用户
提问于 2013-02-03 06:13:22
回答 2查看 5.8K关注 0票数 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语句,我能够计算出如何从军事时间转换为标准时间,但我被如何减去时间所困。我试着想出一种在纸上做加法和减法的方法,但我还没有开发出一种在所有情况下都有效的方法。有什么帮助吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-03 06:27:14

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

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

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

代码语言:javascript
复制
int time1 = 900;
int time2 = 1730;
int diffHours = time2 / 100 - time1 / 100;
int diffMinutes = time2 % 100 - time1 % 100;

如果你不熟悉模数(%),它只返回两个数字相除后的余数,所以7%3就是1。

票数 2
EN

Stack Overflow用户

发布于 2013-02-03 06:30:17

假设您的军事时间存储为0000..2400范围内的int值,那么下面的函数将返回两个这样的值之间的差值。

代码语言:javascript
复制
#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,午夜的基本和扩展格式的完整表示应以以下两种方式之一表示:

代码语言:javascript
复制
    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与1985年4月13日的00:00相同。如果不存在与日期或时间间隔的关联,则a)和b)在24小时计时系统中表示相同的本地时间。

注3表示a)或b)的选择将取决于与日期或时间间隔的任何关联。hh具有值24的表示优选仅表示根据4.4的时间间隔或根据4.5的重复时间间隔的结束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14667076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档