web-dev-qa-db-fra.com

Calcul du décalage horaire

au début et à la fin de mon programme, j'ai

from time import strftime
print int(strftime("%Y-%m-%d %H:%M:%S")



Y1=int(strftime("%Y"))
m1=int(strftime("%m"))
d1=int(strftime("%d"))
H1=int(strftime("%H"))
M1=int(strftime("%M"))
S1=int(strftime("%S"))


Y2=int(strftime("%Y"))
m2=int(strftime("%m"))
d2=int(strftime("%d"))
H2=int(strftime("%H"))
M2=int(strftime("%M"))
S2=int(strftime("%S"))

print "Difference is:"+str(Y2-Y1)+":"+str(m2-m1)+":"+str(d2-d1)\
          +" "+str(H2-H1)+":"+str(M2-M1)+":"+str(S2-S1)

Mais quand j'ai essayé de faire la différence, j'obtiens des erreurs de syntaxe .... Je fais quelques erreurs, mais je ne suis pas sûr de ce qui se passe ...

Fondamentalement, je veux simplement stocker une heure dans une variable au début de mon programme, puis enregistrer une 2e fois dans une deuxième variable près de la fin, puis au dernier bit du programme, calculer la différence et l'afficher. Je n'essaye pas de chronométrer une vitesse de fonction. J'essaie de consigner le temps qu'il a fallu à un utilisateur pour progresser dans certains menus. Quelle est la meilleure façon de procéder?

41
Brian

Le module datetime fera tout le travail pour vous:

>>> import datetime
>>> a = datetime.datetime.now()
>>> # ...wait a while...
>>> b = datetime.datetime.now()
>>> print(b-a)
0:03:43.984000

Si vous ne voulez pas afficher les microsecondes, utilisez simplement (comme suggéré par gnibbler):

>>> a = datetime.datetime.now().replace(microsecond=0)
>>> b = datetime.datetime.now().replace(microsecond=0)
>>> print(b-a)
0:03:43
80
Tim Pietzcker
from time import time

start_time = time()
...

end_time = time()
seconds_elapsed = end_time - start_time

hours, rest = divmod(seconds_elapsed, 3600)
minutes, seconds = divmod(rest, 60)
17
John La Rooy

Vous ne pouvez pas calculer les différences séparément ... quelle différence cela donnerait-il à 7 h 59 et à 8 h 00? Essayer

import time
time.time()

ce qui vous donne les secondes depuis le début de l'époque.

Vous pouvez ensuite obtenir le temps intermédiaire avec quelque chose comme

timestamp1 = time.time()
# Your code here
timestamp2 = time.time()
print "This took %.2f seconds" % (timestamp2 - timestamp1)
6
Johannes Charra

time.monotonic () (essentiellement la disponibilité de votre ordinateur en secondes) est garanti de ne pas se comporter mal lorsque l'horloge de votre ordinateur est ajustée (comme lors de la transition vers/depuis l'heure d'été).

>>> import time
>>>
>>> time.monotonic()
452782.067158593
>>>
>>> a = time.monotonic()
>>> time.sleep(1)
>>> b = time.monotonic()
>>> print(b-a)
1.001658110995777
2
user2394284