2015-01-03 18 views
7

Ho scritto del codice in python 2.7 per un programma timer. Lo svantaggio è che il risultato è in secondi e ne ho bisogno in Minutes:Seconds. Ho provato a formattare il tempo senza alcun risultato. ? Qualcuno può aiutare"Converti secondi in minuti e secondi

from Tkinter import * 
import time 

root = Tk() 
root.title("Timer") 
canvas = Canvas(root) 
canvas.pack() 

time=1 

def tick(): 

    canvas.delete(ALL) 
    global time 
    time += 10 


    if time >= 120: 

     canvas.create_text(180,140, font = ("Calibri",200),text=time,fill='red') 
    else: 

     canvas.create_text(180,140, font = ("Calibri",200),text=time,fill='green') 
    if time == 1000: 
     time = 0 
     tick() 
    else: 
     canvas.after(1000, tick) 

def reset(): 
    global time 
    time = 0 

def close_window(): 
    root.destroy() 

b = Button(root,text="Reset", command=reset) 
c = Button(root,text="Quit", command=close_window) 
b.pack(side = LEFT) 
c.pack(side = RIGHT) 
canvas.after(1, tick) 
root.mainloop() 

risposta

1

Per convertire secondi in minuti e secondi, è possibile utilizzare la funzione di divmod:

>>> time = 1000 # 1000 seconds 
>>> divmod(1000, 60) 
(16, 40) 
>>> 

Il primo numero nella tupla in output è i minuti e il secondo è il restante . secondi È quindi possibile utilizzare str.format per rendere questo tupla nella stringa che si desidera:

>>> time = 1000 
>>> '{}:{}'.format(*divmod(time, 60)) 
'16:40' 
>>> 
10

È possibile utilizzare datetime.timedelta

import datetime 
number_of_seconds = 1000 
str(datetime.timedelta(seconds=number_of_seconds)) 

# output 
'0:16:40' 

O ancora meglio in quanto desideri solo mm:ss, è possibile utilizzare time.strftime

import time 
number_of_seconds = 1000 
time.strftime("%M:%S", time.gmtime(number_of_seconds)) 

# output 
'16:40' 

Documentazioni sono disponibili for datetime module e for time module.

+0

Reg: time.strftime: Se number_of_seconds è più di 3600, allora l'uscita è completamente errato – user2224250

4

Essendo un programmatore un po 'pigro, mi piace riutilizzare il buon lavoro che è incorporato nella libreria standard (dove potrebbe essere ottimizzato ed è sicuramente molto ben testato). Quindi ...:

import datetime 
def secs_to_MS(secs): 
    return datetime.datetime.fromtimestamp(secs).strftime('%M:%S') 

Se avete bisogno di avere ore di lì, questo è troppo facile:

import datetime 
def secs_to_HMS(secs): 
    if secs < 3600: 
     return datetime.datetime.fromtimestamp(secs).strftime('%M:%S') 
    else: 
     return datetime.datetime.fromtimestamp(secs).strftime('%H:%M:%S') 
Problemi correlati