我有两个选定的小时,取自0-23范围。如何以编程方式计算它们之间的差异?例如,22和4之间的差异将是6,22和24-2。
答案 0 :(得分:2)
这是模24算术的示例(有关modular arithmetic的更多信息)。
时间是全等模24,对于24有一个同余(或等价)(例如,1与25是一致的(或等价的))。你可以只计算差异的模块。
(second_time - first_time) modulo 24
在您的示例中,
(4 - 22) modulo 24 = -18 modulo 24 = 6
(24 - 22) modulo 24 = 2 modulo 24 = 2
编辑:
进入更多细节。此答案仅考虑您在问题中指定的详细信息,即从0-23开始的小时数。如果你想要实现更复杂的东西,那么需要考虑很多极端情况和例外情况。
例如,使用我的方法,您将无法在0:00和24:00之间获得差异,因为它们是等效的时间,因此您需要一个特定的案例。无论如何,如果时间只是从0到23,如上所述,0:00和0:00之间的差异将取决于它们是同一时间还是24小时后,这将发生在任何两个相等的时间(6 :00至6:00,是同一天还是+ N天?)。所以你需要另外一个日期来解决这种歧义。
如果您正在使用分钟,如果您考虑时区,闰秒以及所有这些,则会出现更多复杂情况。
根据您使用的语言,模数运算符可能会出现负数的并发症,因此您也应该考虑这一点(添加循环时间会修复它)。所以改为:
(second_time - first_time + 24) modulo 24
答案 1 :(得分:0)
让我们假设第一个选定小时的first_time和第二个选定小时的second_time。
伪代码:
if first_time > 12:
first_time = 24 - first_time
if second_time < 12:
second_time = -second_time
time_difference = abs(first_time - second_time)
如果你需要绝对差异,你可以使用abs()函数,否则你可以排除它。