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

air*_*tyh 13 python time datetime

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

Bla*_*rad 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)
Run Code Online (Sandbox Code Playgroud)


chr*_*yss 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
Run Code Online (Sandbox Code Playgroud)

Python中的负时间对象获得负日期字段,其他字段为正.您可以事先检查:比较适用于时间对象和timedelta对象:

>>> dt2 < dt1
True
>>> t2 < t1
True
Run Code Online (Sandbox Code Playgroud)

  • chryss:你可以认真地做一个例子. (2认同)

Jas*_*dge -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])
Run Code Online (Sandbox Code Playgroud)

虽然有点蹩脚,但确实有效。

  • 如果 t1_ms 在午夜之前且 t2_ms 在午夜之后则不起作用 (2认同)