【问题标题】:Convert seconds to minutes and seconds将秒转换为分和秒
【发布时间】:2015-03-01 07:45:05
【问题描述】:

我在 python 2.7 中为计时器程序编写了一些代码。缺点是结果以秒为单位,我需要它在Minutes:Seconds 中。我试图格式化时间无济于事。谁能帮忙?”

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

【问题讨论】:

    标签: python string time tkinter


    【解决方案1】:

    要将秒转换为分和秒,可以使用divmod 函数:

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

    输出的元组中的第一个数字是分钟,第二个是剩余的秒数。然后你可以使用str.format 把这个元组变成你想要的字符串:

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

    【讨论】:

    • 如果秒数 > 3600 也有效
    • 用零填充值使用'{0:02d}:{1:02d}'.format(*divmod(time, 60))
    【解决方案2】:

    你可以使用datetime.timedelta

    import datetime
    number_of_seconds = 1000
    str(datetime.timedelta(seconds=number_of_seconds))
    
    # output
    '0:16:40'
    

    或者更好,因为你只想要mm:ss,你可以使用time.strftime

    import time
    number_of_seconds = 1000
    time.strftime("%M:%S", time.gmtime(number_of_seconds))
    
    # output
    '16:40'
    

    文档可用for datetime modulefor time module

    【讨论】:

    • Reg: time.strftime: 如果number_of_seconds大于3600,则输出完全不正确
    【解决方案3】:

    作为一个有点懒惰的程序员,我喜欢重用标准库中包含的优秀作品(它可能会得到优化并且肯定经过了很好的测试)。所以...:

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

    如果您也需要在那里度过几个小时,那也很容易:

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

    【讨论】:

      猜你喜欢
      • 2011-01-26
      • 2013-07-11
      • 1970-01-01
      • 1970-01-01
      • 2011-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多