2015-01-03 20 views
7

Tôi đã viết một số mã trong python 2.7 cho một chương trình hẹn giờ. Nhược điểm là kết quả là trong vài giây và tôi cần nó trong Minutes:Seconds. Tôi đã cố gắng định dạng thời gian thành không có kết quả. ? Bất cứ ai có thể giúp"Chuyển đổi giây thành phút và giây

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

Trả lời

1

Để chuyển đổi giây vào phút và giây, bạn có thể sử dụng divmod chức năng:

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

Con số đầu tiên trong tuple outputed là biên bản và thứ hai là còn lại . giây sau đó bạn có thể sử dụng để làm cho str.format tuple này vào chuỗi bạn muốn:

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

bạn có thể sử dụng datetime.timedelta

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

# output 
'0:16:40' 

Hoặc thậm chí tốt hơn vì bạn chỉ muốn mm:ss, bạn có thể sử dụng time.strftime

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

# output 
'16:40' 

Tài liệu tham có sẵn for datetime modulefor time module.

+0

Reg: time.strftime: Nếu NUMBER_OF_SECONDS là hơn 3600, sau đó đầu ra là hoàn toàn không chính xác – user2224250

4

Là một lập trình hơi lười, tôi thích sử dụng lại công việc tốt được thể hiện trong thư viện chuẩn (nơi nó có thể được tối ưu hóa và chắc chắn được kiểm tra rất tốt). Vì vậy, ...:

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

Nếu bạn cần phải có giờ có là tốt, đó là dễ dàng quá:

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') 
Các vấn đề liên quan