Qual é a maneira mais simples de encontrar a diferença entre 2 vezes em python?

StackOverflow https://stackoverflow.com/questions/51010

  •  09-06-2019
  •  | 
  •  

Pergunta

Eu tenho 2 valores de tempo que têm o tipo datetime.time.Eu quero descobrir a diferença deles.A coisa óbvia a fazer é t1 - t2, mas isso não funciona.Funciona para objetos do tipo datetime.datetime mas não para datetime.time.Então, qual é a melhor maneira de fazer isso?

Foi útil?

Solução

Em primeiro lugar, observe que datetime.time é uma hora do dia, independente de um determinado dia e, portanto, a diferença entre quaisquer dois valores de datetime.time será menor que 24 horas.

Uma abordagem é converter ambos os valores datetime.time em valores comparáveis ​​(como milissegundos) e encontrar a diferença.

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])

É um pouco chato, mas funciona.

Outras dicas

Também é um pouco bobo, mas você pode tentar escolher um dia arbitrário e incorporar cada horário nele, usando datetime.datetime.combine, então subtraindo:

>>> 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)

Você poderia transformar ambos em objetos timedelta e subtraia-os um do outro, o que cuidará das sobras.Por exemplo:

>>> 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

Objetos timedelta negativos em Python obtêm um campo de dia negativo, com os outros campos positivos.Você pode verificar de antemão:a comparação funciona tanto em objetos de tempo quanto em objetos timedelta:

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

Python tem pytz (http://pytz.sourceforge.net) módulo que pode ser usado para aritmética de objetos de 'tempo'.Ele também cuida das compensações do horário de verão.A página acima contém vários exemplos que ilustram o uso de pytz.

Parece que isso não é suportado, pois não haveria uma boa maneira de lidar com estouros em datetime.time.Eu sei que esta não é uma resposta direta, mas talvez alguém com mais experiência em python do que eu possa levar isso um pouco mais longe.Para mais informações, veja isto: http://bugs.python.org/issue3250

Recupere os tempos em milissegundos e depois faça a subtração.

Environment.TickCount parece funcionar bem se você precisar de algo rápido.

int início = Environment.TickCount

...Faça alguma coisa()

int elapsedtime = Environment.TickCount - início

Jon

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top