2017-06-26 26 views
2

我试图创建一个任务管理器,它的任务时间是&,而日期是不相关的(每天都会收到)。在两个datetime.time实例之间计算timedelta

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

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

与failture结束:

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

+0

你想要两个日期之间的差异还是只想知道哪个日期更大或更小? –

+0

“13:00减去14:00”的预期结果是什么? – deceze

回答

4

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秒),但应在其他的计算工作。

+0

呃...这就是为什么时间戳不够。 **感谢** –

+0

当在PyCharm中运行时(脚本只包含上面的time_diff)答案是'0:05:00'在python控制台(PyCharm的一部分)上运行相同的time_diff,答案是'datetime.timedelta(0,300) ' 为什么不同?更重要的是 - 我怎样才能在几秒钟内得到答案(剩余时间)? –

1

得到答案在几秒钟内,修改你这样的代码:

return (datetime.datetime.combine(today, t1)-datetime.datetime.combine(today, t2)).total_seconds() 
+0

这不提供问题的答案。要批评或要求作者澄清,请在其帖子下方留言。 - [来自评论](/ review/low-quality-posts/17366728) – geisterfurz007