知道时间是否已经过去或不是python

时间:2014-10-29 12:29:52

标签: python python-datetime

我现在正在使用此代码来获得两个不同时间的差异

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;这是错误的

1 个答案:

答案 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:我应该在发布之前对此进行测试。对不起,我没有。