2009-12-27 11 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 

Come può essere fatto in Python. Sono un principiante quindi non ho idea di dove cominciare.Calcolare il tempo tra l'ora -1 e l'ora 2?

Modificato per aggiungere: Non voglio un timer. L'ora 1 e l'ora 2 vengono immessi manualmente dall'utente.

Grazie in anticipo per il vostro aiuto.

risposta

15

La classe datetime e timedelta dal modulo integrato datetime è ciò di cui avete bisogno.

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 TipoErrore: tipo/i di operando non supportati per /: 'datetime.timedelta' e 'int' – 3zzy

+0

È OK in python 2.6 Ma è sempre possibile convertire l'oggetto timedelta in un numero intero e fai i calcoli, in questo modo: delta.seconds/12 – iamamac

5

Ecco un timer per l'esecuzione del codice di temporizzazione. Forse puoi usarlo per quello che vuoi. time() restituisce l'ora corrente in secondi e i microsecondi dal 1970-01-01 alle 00:00:00.

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

No, voglio calcolare il tempo tra il tempo-1 e il tempo -2, entrambi inseriti manualmente. – 3zzy

+0

Esattamente quello che avevo in mente! .... saluti a quello! – Arkapravo

0

Supponendo che l'utente sta entrando stringhe come "01:12", è necessario convertire (così come validate) quelle stringhe nel numero di minuti dal 00:00 (ad esempio, "01:12" è 1*60+12, o 72 minuti), quindi sottrarre uno dall'altro. È quindi possibile convertire la differenza in minuti indietro in una stringa del modulo hh:mm.

6

più semplice e diretto può essere qualcosa di simile:

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) 

Ad esempio, una corsa tipico potrebbe essere:

$ 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 perché questo è un modo migliore per qualcuno che apprende Python rispetto all'utilizzo di datetime e timedelta. Preferirei nomi di variabili più espressive di "s", "sh" e "sm". Alex, perché usare la variabile 'prom'? Perché non chiamare la funzione senza argomenti? –

+1

@Raja, heh, volevo dare istruzioni diverse nelle due occasioni ma poi mi ero dimenticato di usare 'prom' nel prompt - risolto. Per quanto riguarda i nomi delle variabili, per le variabili estremamente minuscole, i nomi minuscoli sono appropriati - quelli a cui è stato insegnato a nominare tali variabili a 2 righe 'stringAsInputByTheUser',' hours_in_string_form', e simili, e mai esposti a questo importante distinzione sulla scoping, dovrebbe iniziare ad essere esposto a questo problema. –

Problemi correlati