2010-08-06 7 views
30

al comienzo y al final de mi programa, tengoCálculo Diferencia horaria

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) 

Pero cuando traté de obtener la diferencia, tengo errores de sintaxis .... estoy haciendo algunas cosas equivocadas, pero No estoy seguro de lo que está pasando ...

Básicamente, solo quiero almacenar una hora en una variable al comienzo de mi programa, luego almacenar una segunda vez en una segunda variable cerca del final, luego en el último bit del programa, calcule la diferencia y muéstrela. No estoy tratando de sincronizar la velocidad de una función. Estoy intentando registrar cuánto tiempo tardó un usuario en avanzar a través de algunos menús. ¿Cuál es la mejor manera de hacer esto?

+3

Piense en lo que sucederá si el usuario inicia un t 8:59:34 y termina a las 9:10:12 –

Respuesta

65

El módulo datetime hará todo el trabajo por usted:

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

Si no desea mostrar los microsegundos, simplemente use (como lo sugirió gnibbler):

>>> a = datetime.datetime.now().replace(microsecond=0) 
>>> b = datetime.datetime.now().replace(microsecond=0) 
>>> print(b-a) 
0:03:43 
+4

si no quiere microsegundos, puede usar 'a = datetime.datetime.now(). replace (microsecond = 0)' –

+1

@gnibbler: Hey, bonito. Mucho mejor que jugar con índices de cuerdas. –

+0

puede usar c = b-a, str (c) para obtener la cadena '0:03:43' –

13
from time import time 
start_time = time() 

... 

end_time = time() 
time_taken = end_time - starttime # time_taken is in seconds 

hours, rest = divmod(time_taken,3600) 
minutes, seconds = divmod(rest, 60) 
6

No se pueden calcular las diferencias por separado ... ¿qué diferencia habría entre 7:59 y 8:00 en punto? Pruebe

import time 
time.time() 

que le da los segundos desde el comienzo de la época.

A continuación, puede obtener el tiempo intermedio con algo así como

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