在Python中,最简单的计算两个时间差的方法是什么?
我有两个时间值,它们的类型是 datetime.time
。我想找出它们之间的差值。最简单的做法是用 t1 - t2,但这样做不管用。这个方法适用于 datetime.datetime
类型的对象,但对 datetime.time
类型的对象就不行。那么,最好的办法是什么呢?
7 个回答
7
你可以把这两者都转换成时间差对象,然后把它们相减,这样就能自动处理进位的问题。例如:
>>> import datetime as dt
>>> t1 = dt.time(23, 5, 5, 5)
>>> t2 = dt.time(10, 5, 5, 5)
>>> dt1 = dt.timedelta(hours=t1.hour, minutes=t1.minute, seconds=t1.second, microseconds=t1.microsecond)
>>> dt2 = dt.timedelta(hours=t2.hour, minutes=t2.minute, seconds=t2.second, microseconds=t2.microsecond)
>>> print(dt1-dt2)
13:00:00
>>> print(dt2-dt1)
-1 day, 11:00:00
>>> print(abs(dt2-dt1))
13:00:00
在Python中,负的时间差对象会有一个负的天数字段,而其他字段则是正数。你可以提前检查一下:比较操作可以在时间对象和时间差对象之间进行:
>>> dt2 < dt1
True
>>> t2 < t1
True
16
这听起来有点傻,但你可以试着选一个随便的日期,然后把每个时间都放到这个日期里,使用 datetime.datetime.combine
,然后再进行减法运算:
>>> import datetime
>>> t1 = datetime.time(2,3,4)
>>> t2 = datetime.time(18,20,59)
>>> dummydate = datetime.date(2000,1,1)
>>> datetime.datetime.combine(dummydate,t2) - datetime.datetime.combine(dummydate,t1)
datetime.timedelta(0, 58675)
-1
首先要注意,datetime.time表示的是一天中的某个时间,它和具体的日期没有关系。所以,任何两个datetime.time值之间的差距都不会超过24小时。
一种方法是把这两个datetime.time值转换成可以比较的数值(比如毫秒),然后再计算它们之间的差距。
t1, t2 = datetime.time(...), datetime.time(...)
t1_ms = (t1.hour*60*60 + t1.minute*60 + t1.second)*1000 + t1.microsecond
t2_ms = (t2.hour*60*60 + t2.minute*60 + t2.second)*1000 + t2.microsecond
delta_ms = max([t1_ms, t2_ms]) - min([t1_ms, t2_ms])
虽然这个方法有点简单,但它确实有效。