在python中发现2次之间的差异的最简单方法是什么?

时间:2020-03-05 18:49:44  来源:igfitidea点击:

我有2个时间值,它们的类型为" datetime.time"。我想找到他们的区别。显然要做的是t1 t2,但这是行不通的。它适用于类型为datetime.datetime的对象,但不适用于类型为datetime.time的对象。那么最好的方法是什么?

解决方案

回答

似乎不支持此方法,因为没有很好的方法来处理datetime.time中的溢出。我知道这不是直接的答案,但是也许比我有更多python经验的人可以更进一步。有关更多信息,请参见:http://bugs.python.org/issue3250

回答

我们可以将它们都转换为timedelta对象,并将它们彼此相减,这将照顾到结转。例如:

>>> 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中的负timedelta对象的日字段为负,其他字段为正。我们可以事先检查:比较适用于时间对象和timedelta对象:

>>> dt2 < dt1
True
>>> t2 < t1
True

回答

首先,请注意,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])

有点la脚,但是有效。

回答

同样有点愚蠢,但是我们可以尝试使用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)

回答

Python具有pytz(http://pytz.sourceforge.net)模块,可用于对"时间"对象进行算术运算。它也照顾DST偏移量。上面的页面上有许多示例,这些示例说明了pytz的用法。

回答

检索时间(以毫秒为单位),然后进行减法。

回答

如果我们需要快速操作,Environment.TickCount似乎可以很好地工作。

int开始= Environment.TickCount

...做点什么()

int经过时间= Environment.TickCount开始

乔恩