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

时间:2008-09-09 00:28:58

标签: python datetime time

我有2个时间值,其类型为datetime.time。我想找到他们的不同之处。显而易见的事情是t1 - t2,但这不起作用。它适用于datetime.datetime类型的对象,但不适用于datetime.time。那么最好的方法是什么?

7 个答案:

答案 0 :(得分: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 :(得分:7)

您可以将两者转换为timedelta objects并相互减去这些,这将照顾结转。例如:

>>> 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对象:

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

答案 2 :(得分:3)

Python有pytz(http://pytz.sourceforge.net)模块,可以用于'时间'对象的算术。它也可以处理DST偏移。上面的页面有很多例子来说明pytz的用法。

答案 3 :(得分:1)

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

答案 4 :(得分:-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])

这有点蹩脚,但它确实有效。

答案 5 :(得分:-1)

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

答案 6 :(得分:-3)

如果你需要快速的话,Environment.TickCount似乎运作良好。

int start = Environment.TickCount

... DoSomething的()

int elapsedtime = Environment.TickCount - start

乔恩