13

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

4

7 回答 7

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)
于 2008-09-09T00:53:24.320 回答
7

您可以将两者都转换为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 对象得到一个负的 day 字段,而其他字段为正。您可以事先检查:比较适用于时间对象和 timedelta 对象:

>>> dt2 < dt1
True
>>> t2 < t1
True
于 2008-09-09T00:42:31.287 回答
3

Python 有 pytz ( http://pytz.sourceforge.net ) 模块,可用于“时间”对象的算术运算。它也处理 DST 偏移量。上面的页面有许多示例说明了 pytz 的用法。

于 2008-09-20T16:13:22.197 回答
1

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

于 2008-09-09T00:37:28.507 回答
-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])

这有点蹩脚,但它的工作原理。

于 2008-09-09T00:47:48.343 回答
-1

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

于 2008-09-20T16:16:44.450 回答
-3

如果您需要快速的东西,Environment.TickCount 似乎运作良好。

int start = Environment.TickCount

...做点什么()

int elapsedtime = Environment.TickCount - 开始

乔恩

于 2008-11-04T21:05:21.760 回答