计算两个datetime.time实例之间的时间差(timedelta)

3

我正在尝试创建一个具有特定时间和任务的任务管理器,日期并不重要(每天都会重复)。

我试图找到时间之间的差异,例如timedelta(hours=1)

datetime.time(13,00,00) - datetime.time(14,00,00)

以失败结束:

Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time'

在计算时间差时,datetime.date(2017,06,26) - datetime.date(2017,06,25) 能够顺利结束。


1
请包含演示失败的示例代码。它不需要是您所有的代码,只需要展示为什么它没有工作即可。 - tdelaney
你是想要计算两个日期之间的差距,还是只想知道哪个日期更大或更小? - FrankTheTank_12345
"13:00减去14:00"的预期结果是什么? - deceze
是的,我对不同的结果很感兴趣。 - guyd
所以你想要timedelta(hours=1)作为结果? - deceze
@deceze - 我希望知道还有1小时才能运行脚本。 - guyd
2个回答

6

Python的datetime模块不能仅基于时间来计算时间差。这可能会导致歧义,例如当总和大于24小时时该怎么办。在您的情况下,有一个应该有效的技巧。将您的时间转换为同一天的datetime,然后从那里进行计算。

>>> def time_diff(t1, t2):
...     today = datetime.date.today()
...     return (datetime.datetime.combine(today, t1)
...         - datetime.datetime.combine(today, t2))
... 
>>> 
>>> time_diff(datetime.time(13,0,0), datetime.time(14,0,0))
datetime.timedelta(-1, 82800)

负的timedelta看起来很奇怪(相当于-1天加上82800秒),但在其他计算中应该是有效的。


嗯...这就是为什么时间戳不够用了。谢谢。 - guyd
在PyCharm中运行(脚本仅包含上述time_diff),答案为0:05:00。在Python控制台(PyCharm的一部分)上运行相同的time_diff,答案为datetime.timedelta(0, 300)。为什么会有差异?更重要的是,如何以秒为单位获取答案(剩余时间)? - guyd

2
为了在几秒钟内获得答案,请按照以下方式修改您的代码:
return (datetime.datetime.combine(today, t1)-datetime.datetime.combine(today, t2)).total_seconds()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接