计算时差Python

2024-05-16 22:05:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我在计算两个24小时制时间之间的时间差。 我似乎找不到或让我的代码以相同的小时值(例如13:32和13:36)工作两次,当计算具有不同hr值的时间时,它工作得很好。如果可能的话我不想用日期、时间模块,可以假设第二次晚于第一次

time1hr= 13
time1min= 32
time2hr= 13
time2min= 36

min_diff= 60 - time1min + time2min
hour_diff= abs(time2hr - time1hr) -1 

Tags: 模块代码时间hrdiffabsmin小时
3条回答

OP出于某种模糊的原因,正在请求一个不使用datetime模块和if语句的解决方案。在

一种可能是把时间转换成分钟。甚至是秒,就像我的例子:

def time_diff(t1, t2):
  h1, m1, s1 = t1
  h2, m2, s2 = t2
  s1 = h1 * 3600 + m1 * 60 + s1
  s2 = h2 * 3600 + m2 * 60 + s2
  diff = abs(s2 - s1)
  h_diff = int(diff / 3600)
  m_diff = int((diff % 3600) / 60)
  s_diff = diff % 60
  return (h_diff, m_diff, s_diff)

time1hr = 13
time1min = 32
time2hr = 13
time2min = 36
h_diff, m_diff, _ = time_diff((time1hr, time1min, 0), (time2hr, time2min, 0))
print("Diff in hh:mm is {0:02}:{1:02}.".format(h_diff, m_diff))
# Diff in hh:mm is 00:04.

首先,不能通过加法来计算差值,但这正是您在这里要做的:

min_diff= 60 - time1min + time2min

另外,如果可以假设time2晚于time2,那么为什么要在这里使用abs?在

^{pr2}$

最后,将60加到min_diff,并从hour_diff中减去1。如果min_diff溢出为负数,这显然是正确的做法。但只有当time1min大于time2min时才会发生这种情况,而不是每次。(当然,只有在减法而不是加法的情况下)你确实需要处理这个问题,因为你可以假设第二次比第一次晚,但这并不意味着你可以假设第二次的时间比第一次的时间长,但是你只需要在它发生的时候处理它,否则你会得到像“-1小时,+37分钟”这样的结果而不是“-43分钟”。在

所以,从这个开始:

^{3}$

如果你看看这个,你应该意识到这和你在小学学的2位数或更多位数的减法是完全一样的,只是你必须携带一个60,而不是10。仔细考虑一下,看看你是否能想出一些可能很棘手的测试用例。在


如果出于某种原因不允许您使用if语句怎么办?在

显然,您可以将其转换为while语句;只要输入值有效,它将运行“循环”0次或1次,其效果与if完全相同,但这可能是作弊。或者你可以用三元if表达式代替if语句,但这也可能是作弊。在

但是一个更聪明的解决方案是使用除法和余数来进行携带。45/60是0,还有45,但是-15/60是-1,还有45个剩余。*所以:

carry, min_diff = divmod(time2min - time1min, 60)
hour_diff = time2hr - time1hr + carry * 60

我认为这可能是过于聪明和棘手,但你的里程数可能会有所不同。在


*当涉及负数时,并非所有语言都以相同的方式定义除法和余数。在Python中,除法总是向下取整,所以在C中除法总是舍入到0,所以在C中除法总是舍入到0,所以只剩下-15,这对我们没有任何帮助。幸运的是,我们使用的是Python,而不是C。

两个datetime对象之间的区别是一个timelta对象,它有几种方法来获得差异。在

相关问题 更多 >