2015-01-03 13 views
7

Napisałem trochę kodu w pythonie 2.7 dla programu czasowego. Wadą jest to, że wynik jest w sekundach i potrzebuję go w Minutes:Seconds. Próbowałem sformatować czas bezskutecznie. ? Może ktoś pomóc”Konwersja sekund na minuty i sekundy

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() 

Odpowiedz

1

Aby przekonwertować sekund na minuty i sekundy, można użyć divmod funkcję:

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

Pierwsza liczba w outputed krotki jest minuty i sekundy jest pozostała sekund. następnie można użyć str.format aby ten krotki do łańcucha chcesz:

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

można użyć datetime.timedelta

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

# output 
'0:16:40' 

Albo jeszcze lepiej, ponieważ ty tylko chcesz mm:ss można użyć time.strftime

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

# output 
'16:40' 

Dokumentacje są dostępne for datetime module i for time module.

+0

Reg: time.strftime: Jeśli liczba_sekund jest więcej niż 3600, to wyjście jest całkowicie niepoprawne – user2224250

4

Będąc nieco leniwym programistą, lubię ponownie wykorzystywać dobrą pracę, która jest zawarta w standardowej bibliotece (gdzie może być zoptymalizowana i na pewno bardzo dobrze przetestowana). Więc ...:

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

Jeśli trzeba mieć godzin tam również, że zbyt łatwo:

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')