Quelle est la manière la plus simple de trouver la différence entre 2 fois en python ?

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

  •  09-06-2019
  •  | 
  •  

Question

J'ai 2 valeurs temporelles qui ont le type datetime.time.Je veux trouver leur différence.La chose évidente à faire est t1 - t2, mais cela ne fonctionne pas.Cela fonctionne pour les objets de type datetime.datetime mais pas pour datetime.time.Alors, quelle est la meilleure façon de procéder ?

Était-ce utile?

La solution

Tout d'abord, notez qu'un datetime.time est une heure de la journée, indépendante d'un jour donné, et donc la différence entre deux valeurs datetime.time sera inférieure à 24 heures.

Une approche consiste à convertir les deux valeurs datetime.time en valeurs comparables (telles que les millisecondes) et à trouver la différence.

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

C'est un peu nul, mais ça marche.

Autres conseils

C'est aussi un peu idiot, mais vous pouvez essayer de choisir un jour arbitraire et de l'intégrer à chaque fois, en utilisant datetime.datetime.combine, puis en soustrayant :

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

Vous pourriez transformer les deux en objets timedelta et soustrayez-les les uns des autres, ce qui prendra en charge les reports.Par exemple:

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

Les objets timedelta négatifs en Python obtiennent un champ jour négatif, les autres champs étant positifs.Vous pouvez vérifier au préalable :la comparaison fonctionne à la fois sur les objets time et les objets timedelta :

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

Python a pytz (http://pytz.sourceforge.net) module qui peut être utilisé pour l'arithmétique des objets 'temps'.Il prend également en charge les compensations DST.La page ci-dessus contient un certain nombre d'exemples illustrant l'utilisation de pytz.

Il semble que cela ne soit pas pris en charge, car il n'y aurait pas de bon moyen de gérer les débordements dans datetime.time.Je sais que ce n'est pas une réponse directe, mais peut-être que quelqu'un avec plus d'expérience en Python que moi pourra aller un peu plus loin.Pour plus d'informations, voir ceci : http://bugs.python.org/issue3250

Récupérez les temps en millisecondes puis effectuez la soustraction.

Environment.TickCount semble bien fonctionner si vous avez besoin de quelque chose de rapide.

int start = Environnement.TickCount

...Faire quelque chose()

int temps écoulé = Environment.TickCount - démarrer

Jon

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top