2009-12-27 17 views
9
enter time-1 // eg 01:12 
enter time-2 // eg 18:59 

calculate: time-1 to time-2/12 
// i.e time between 01:12 to 18:59 divided by 12 

¿Cómo se puede hacer en Python. Soy un principiante, así que realmente no tengo ni idea de por dónde empezar.¿Calcula el tiempo entre el tiempo-1 y el tiempo-2?

Editado para agregar: No quiero un temporizador. Tanto el tiempo-1 como el tiempo-2 son ingresados ​​por el usuario de forma manual.

Gracias de antemano por su ayuda.

Respuesta

15

La clase datetime y timedelta del módulo incorporado datetime es lo que necesita.

from datetime import datetime 

# Parse the time strings 
t1 = datetime.strptime('01:12','%H:%M') 
t2 = datetime.strptime('18:59','%H:%M') 

# Do the math, the result is a timedelta object 
delta = (t2 - t1)/12 
print(delta.seconds) 
+0

delta = (t2 - t1)/12 TypeError: tipo de operando sin soporte (s) para el /: 'datetime.timedelta' y 'int' – 3zzy

+0

Está bien en Python 2.6 Pero siempre se puede convertir el objeto timedelta a un entero y haga los cálculos, así: delta.seconds/12 – iamamac

5

Aquí hay un temporizador para la ejecución del código de tiempo. Tal vez puedas usarlo para lo que quieras. time() devuelve la hora actual en segundos y microsegundos desde 1970-01-01 00:00:00.

from time import time 
t0 = time() 
# do stuff that takes time 
print time() - t0 
+0

No, quiero calcular el tiempo entre el tiempo-1 y la hora -2, ambos ingresados ​​manualmente. – 3zzy

+0

¡Exactamente lo que tenía en mente! .... ¡salud a eso! – Arkapravo

0

Suponiendo que el usuario está entrando en cadenas como "01:12", es necesario convertir (así como validar) aquellas cadenas en el número de minutos desde 00:00 (por ejemplo, "01:12" es 1*60+12, o 72 minutos), luego restar uno de otro. A continuación, puede convertir la diferencia en minutos en una cadena del formulario hh:mm.

6

más simple y directa puede ser algo como:

def getime(prom): 
    """Prompt for input, return minutes since midnight""" 
    s = raw_input('Enter time-%s (hh:mm): ' % prom) 
    sh, sm = s.split(':') 
    return int(sm) + 60 * int(sh) 

time1 = getime('1') 
time2 = getime('2') 

diff = time2 - time1 

print "Difference: %d hours and %d minutes" % (diff//60, diff%60) 

Por ejemplo, una serie típica podría ser:

$ python ti.py 
Enter time-1 (hh:mm): 01:12 
Enter time-2 (hh:mm): 18:59 
Difference: 17 hours and 47 minutes 
+1

+1 porque esta es una mejor manera para que alguien aprenda Python en comparación con el uso de datetime y timedelta. Preferiría nombres de variables más expresivos que 's', 'sh' y 'sm'. Alex, ¿por qué usar la variable 'prom'? ¿Por qué no llamar a la función sin argumentos? –

+1

@Raja, heh, tenía la intención de dar indicaciones diferentes en las dos ocasiones, pero luego me olvidé de usar 'prom' en el mensaje - corregido. En cuanto a los nombres de variables, para variables de ámbito extremadamente pequeño, los nombres pequeños son apropiados: aquellos a quienes se les ha enseñado a nombrar tales variables de 2 líneas de alcance 'stringAsInputByTheUser',' hours_in_string_form', y similares, y nunca expuestos a este importante distinción sobre el alcance, debería comenzar a estar expuesto a este problema. –

Cuestiones relacionadas