2024-05-16 22:05:18 发布
网友
我在计算两个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
OP出于某种模糊的原因,正在请求一个不使用datetime模块和if语句的解决方案。在
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?在
abs
最后,将60加到min_diff,并从hour_diff中减去1。如果min_diff溢出为负数,这显然是正确的做法。但只有当time1min大于time2min时才会发生这种情况,而不是每次。(当然,只有在减法而不是加法的情况下)你确实需要处理这个问题,因为你可以假设第二次比第一次晚,但这并不意味着你可以假设第二次的时间比第一次的时间长,但是你只需要在它发生的时候处理它,否则你会得到像“-1小时,+37分钟”这样的结果而不是“-43分钟”。在
min_diff
hour_diff
time1min
time2min
所以,从这个开始:
如果你看看这个,你应该意识到这和你在小学学的2位数或更多位数的减法是完全一样的,只是你必须携带一个60,而不是10。仔细考虑一下,看看你是否能想出一些可能很棘手的测试用例。在
如果出于某种原因不允许您使用if语句怎么办?在
显然,您可以将其转换为while语句;只要输入值有效,它将运行“循环”0次或1次,其效果与if完全相同,但这可能是作弊。或者你可以用三元if表达式代替if语句,但这也可能是作弊。在
while
但是一个更聪明的解决方案是使用除法和余数来进行携带。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对象,它有几种方法来获得差异。在
OP出于某种模糊的原因,正在请求一个不使用
datetime
模块和if
语句的解决方案。在一种可能是把时间转换成分钟。甚至是秒,就像我的例子:
首先,不能通过加法来计算差值,但这正是您在这里要做的:
另外,如果可以假设time2晚于time2,那么为什么要在这里使用
^{pr2}$abs
?在最后,将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个剩余。*所以:
我认为这可能是过于聪明和棘手,但你的里程数可能会有所不同。在
*当涉及负数时,并非所有语言都以相同的方式定义除法和余数。在Python中,除法总是向下取整,所以在C中除法总是舍入到0,所以在C中除法总是舍入到0,所以只剩下-15,这对我们没有任何帮助。幸运的是,我们使用的是Python,而不是C。
两个datetime对象之间的区别是一个timelta对象,它有几种方法来获得差异。在
相关问题 更多 >
编程相关推荐