Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 知道时间是否已经过去_Python_Python Datetime - Fatal编程技术网

Python 知道时间是否已经过去

Python 知道时间是否已经过去,python,python-datetime,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(currentTimeSt

我现在用这段代码来计算两个不同时间的差值

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

在本例中,假设当前时间为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"

如果diff_minutes>=0且diff_minutes=48且diff_minutes=59且diff_minutes=104且diff_minutes=108:#问题就出在这里所以我们真正应该做的是只处理datetime对象。当您对它们进行数学运算时,会生成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"
导入日期时间
def游戏时间(小时、分钟):
now=datetime.datetime.now()
starttime=datetime.datetime.combine(datetime.date.today(),datetime.time(小时,分钟))
dif=现在-开始时间
如果dif
附言:说真的,圭多


PPS:我应该在发布之前测试一下。很抱歉我没有这样做。

您可能想要
diff.total_seconds()
而不是
diff.seconds
我很好奇为什么您不只是在datetime对象上执行操作。有什么原因吗?我不知道你的意思,如果有一个更有效的方法来做我正在做的事情,请张贴它@氚21你能展示你的确切进口量吗?我无法重现您的问题。在我发布解决方案之前,您实际上想做什么?具体来说,你想从中得到什么信息。(如果您愿意,请用这些信息编辑您的问题)我得到了以下信息:dif=now-starttime TypeError:-:'datetime.time'和'datetime.time'的不支持的操作数类型很好现在可以工作了,还请进行编辑,使它应该是/60而不是*60,因为我需要几分钟的时间。有没有办法只显示分钟数?我不需要毫秒@氚21不,当我不使用总秒数时,它返回到与以前相同的问题。尚未开始的时间给了我超过1000分钟的时差。当使用总秒数时,它会给我一个负值,这是很好的,我可以使用它。但是,我必须拆分该值以删除毫秒感谢帮助:顺便说一句