减去蟒蛇两次
我有两个datetime.time
值,exit
和enter
,我想要做的事,如:减去蟒蛇两次
duration = exit - enter
不过,我得到这个错误:
TypeError: unsupported operand type(s) for -: 'datetime.time' and 'datetime.time
我怎样做这是否正确?一种可能的解决方案是将变量time
变量转换为datetime
变量,然后子结构,但我相信你们必须有一个更好,更清洁的方式。
datetime.time
不支持这个,因为以这种方式减去时间几乎没有意义。如果你想这样做,请使用完整的datetime.datetime
。
如果你从你的域名知道两个'datetime.time'对象'a'和'b'来自同一天,那'b> a',那么操作'b - a'就具有完美的含义。 – swalog 2014-02-05 13:51:19
即使他们不是同一天,它仍然很有道理。至少和'arctan(0)=(0,pi,2pi,...)'一样有意义,但我们不关心第一个之后的任何值。所以,'4:00 - 20:00'是'8:00' - 它也是('32:00','56:00',...),但是谁在乎? – naught101 2015-03-10 23:34:23
[除非是其中一种情况。](https://www.youtube.com/watch?v=-5wpm-gesOY) – 2015-03-11 09:35:53
试试这个:
from datetime import datetime, date
datetime.combine(date.today(), exit) - datetime.combine(date.today(), enter)
combine
建立一个日期,可以扣除。
import datetime
def diff_times_in_seconds(t1, t2):
# caveat emptor - assumes t1 & t2 are python times, on the same day and t2 is after t1
h1, m1, s1 = t1.hour, t1.minute, t1.second
h2, m2, s2 = t2.hour, t2.minute, t2.second
t1_secs = s1 + 60 * (m1 + 60*h1)
t2_secs = s2 + 60 * (m2 + 60*h2)
return(t2_secs - t1_secs)
# using it
diff_times_in_seconds(datetime.datetime.strptime("13:23:34", '%H:%M:%S').time(),datetime.datetime.strptime("14:02:39", '%H:%M:%S').time())
,而不是使用的时候尽量timedelta:
from datetime import timedelta
t1 = timedelta(hours=7, minutes=36)
t2 = timedelta(hours=11, minutes=32)
t3 = timedelta(hours=13, minutes=7)
t4 = timedelta(hours=21, minutes=0)
arrival = t2 - t1
lunch = (t3 - t2 - timedelta(hours=1))
departure = t4 - t3
print(arrival, lunch, departure)
我有类似的情况,你和我结束了使用外部库调用arrow。
这里是什么样子:
>>> import arrow
>>> enter = arrow.get('12:30:45', 'HH:mm:ss')
>>> exit = arrow.now()
>>> duration = exit - enter
>>> duration
datetime.timedelta(736225, 14377, 757451)
用途:
from datetime import datetime, date
duration = datetime.combine(date.min, end) - datetime.combine(date.min, beginning)
使用date.min
是有点更简洁,甚至在半夜工作。
这可能不是date.today()
的情况,如果第一次调用发生在23:59:59,下一次发生在00:00:00,可能会返回意外的结果。
同意你的意见。 – ramwin 2017-03-22 05:52:40
python timedelta库应该做你所需要的。当您减去两个datetime
实例时将返回一个timedelta
。
import datetime
dt_started = datetime.datetime.utcnow()
# do some stuff
dt_ended = datetime.datetime.utcnow()
print((dt_ended - dt_started).total_seconds())
我非常希望upvote这个回答的问题,但我不会直到答案被接受。 – raratiru 2017-11-12 14:58:10