我现在正在使用此代码来获得两个不同时间的差异
from time import strftime
from datetime import datetime
fmt = '%H:%M'
currentTimeString = strftime(fmt) #get the current time
gameTimeObject = datetime.strptime(time , fmt)
currentTimeObject = datetime.strptime(currentTimeString, fmt)
diff = currentTimeObject-gameTimeObject
diff_minutes = diff.seconds/60
我有一个for循环,循环遍历不同的时间值,11:00,12:00,13:00,14:00。
出于本示例的目的,我们可以说currentTime是 13:23
我在时间已经过去时得到了我想要的结果,11:00,12:00,13:00但到了14:00时, diff_minutes 显示的值 1403
为什么这是一个问题是因为我在执行该代码后执行此操作
if diff_minutes >= 0 and diff_minutes <= 47:
time = str(diff_minutes)
elif diff_minutes >= 48 and diff_minutes <= 58:
time = "HT"
elif diff_minutes >= 59 and diff_minutes <= 103:
time = str(diff_minutes)
elif diff_minutes >= 104 and diff_minutes <= 107:
time = "90'"
elif diff_minutes >= 108: # HERE IS THE PROBLEM <<<<<<-------
time = "FT"
正如您所看到的,尚未通过的时间将变为&#34; FT&#34;因为我使用if语句来了解游戏的时间是否结束。我该如何解决这个问题?
---编辑更多关于我试图做的事情的信息
所以我在这里尝试做的是将时间变量设置为足球比赛。上述13:00等的不同时间是游戏开始时的时间。所以我想做的是如果当前时间是13:23,那么我会将该足球比赛的时间标签更改为23&#39;自23分钟过去了。如果已经过去的总时间超过108分钟则意味着游戏已结束,这就是为什么我将时间变量设置为&#34; FT&#34;在最后的if语句中。
正如我之前所说,问题发生的地方因为diff_minutes在游戏尚未启动时给我一个高于108分钟的值,它会将时间变量更改为&#34; FT&#34;这是错误的
答案 0 :(得分:1)
所以我们真正应该做的只是在这里使用datetime对象。当你对它们进行数学运算时,产生timedelta对象。这些timedelta对象具有可比性。这使您的代码编写秘书。另外 - 由于if / elif / else树是短路的,你不需要检查时间是否在两次之间,只是小于上限。我承认我对足球的领域知识仅限于知道它是一个90分钟的游戏,所以你可能需要调整它,但它应该给你这个想法。
import datetime
def gametime(hour, minute):
now = datetime.datetime.now()
starttime = datetime.datetime.combine(datetime.date.today(), datetime.time(hour, minute))
dif = now - starttime
if dif < datetime.timedelta(seconds=48*60):
return dif.seconds / 60
elif dif < datetime.timedelta(seconds=58*60):
return "Half Time"
elif dif < datetime.timedelta(seconds=104*60):
return dif.seconds / 60
elif dif < datetime.timedelta(seconds=108*60):
return "90'"
else:
return "Final"
PS:说真的,Guido?
PPS:我应该在发布之前对此进行测试。对不起,我没有。