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

What is the simplest way to find the difference between 2 times in python?

提问人:airportyh 提问时间:9/9/2008 最后编辑:S.L. Barth is on codidact.comairportyh 更新时间:8/5/2015 访问量:11136

问:

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

Python 日期时间

评论


答:

1赞 pkaeding 9/9/2008 #1

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

7赞 chryss 9/9/2008 #2

您可以将两者转换为时间增量对象,并将它们相互减去,这将处理遗留问题。例如:

>>> 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赞 Arafangion 3/12/2009
chryss:你可以在这里举个例子。
-1赞 Jason Etheridge 9/9/2008 #3

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

这有点蹩脚,但它有效。

评论

0赞 Blair Conrad 9/9/2008
请注意,此解决方案不会保留符号。此外,delta_ms = abs(t1_ms - t2_ms) 更容易理解,至少可以节省一个减法。
2赞 Mr Fooz 11/6/2008
如果t1_ms在午夜之前,t2_ms在午夜之后,则不起作用
0赞 Paggas 1/18/2010
不应该是* 1000000吗?由于 1 s = 1000000 μs。
16赞 Blair Conrad 9/9/2008 #4

也有点傻,但你可以尝试选择一个任意的一天,每次都嵌入其中,使用 ,然后减去: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)
3赞 Girish 9/21/2008 #5

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

评论

0赞 jfs 8/5/2015
谈论只知道时间而不指定日期的时区是没有意义的。如果您同时知道日期和时间,则可以使用多种差异定义
-1赞 Joshua 9/21/2008 #6

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

-3赞 Jon Raynor 11/5/2008 #7

如果您需要快速的东西,Environment.TickCount 似乎可以很好地工作。

int start = Environment.TickCount

...DoSomething()

int elapsedtime = Environment.TickCount - 开始

乔恩