军事时间的C++时差
C++ time difference in military time
我正在尝试创建一个程序,该程序将两个军事时间的差值计算出来。
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中规定的重复时间间隔。
- 为什么我在地图中搜索STL时差很大?
- 时钟功能返回零时差
- printf(时差程序)中的引用问题
- 如何找到纪元时间戳和 std::chrono::system_clock::now 之间的时差(以毫秒为单位)
- 计算C++军事时间的时差
- C 计时差为2个时钟之间的差异
- 如何在跨平台 c++ 32 位系统中获取以毫秒为单位的时差
- 在使用按位移位而不是 mod 时,CUDA 中存在显着的时差
- 将 UTC 时差转换为字符串增强
- 使用"%"与"&"时差/增加不同
- 在 c++ 中获取以毫秒为单位的时差
- 为什么用“std::chrono”进行时差测量时,与“double”类型相比,用“float”类型给出的有效数字更多
- 编译时的时差
- 获取特定日期的时差
- 将R转换为Rcpp:向量中连续日期之间的平均时差
- 考虑夏令时的时差
- c++时差函数计算夏令时吗
- 军事时间的C++时差