以分钟为单位的格式持续时间为周,天,小时,分钟

时间:2016-03-10 20:08:03

标签: python python-2.7 divmod

我有一个经过时间的列表,以分钟为单位,我正在尝试将它们重新格式化为数周,日,小时和分钟的字符串。

因此,例如,7,480分钟= 3周,4小时40分钟。

我希望格式如此:'3w4h40m'

使用divmod我写了一个函数来将分钟数分解为几周,几天,几小时和几分钟并返回字符串:

def formattime(time):
    tl = [divmod(divmod(divmod(time,60)[0],8)[0],5)[0],divmod(divmod(divmod(time,60)[0],8)[0],5)[1],divmod(divmod(time,60)[0],8)[1],divmod(time,60)[1]]

    timestring = str(tl[0])+'w'+str(tl[1])+'d'+str(tl[2])+'h'+str(tl[3])+'m'

    return timestring

但是,如果数字为零,我不希望它返回任何周,日,小时或分钟的数字:

>>> formattime(7480)
'3w0d4h40m'

是否有回归'3w4h40m'的pythonic和直接方式?

1 个答案:

答案 0 :(得分:2)

如果你有一个列表,你可以将组件过滤掉0:

def formattime(time):
    # format to workweeks, workdays, hours and minutes
    # a workweek is 5 days, a workday is 8 hours
    hours, minutes = divmod(time, 60)
    days, hours = divmod(hours, 8)  # work days
    weeks, days = divmod(days, 5)   # work weeks
    components = [str(v) + l for l, v in zip('wdhm', (weeks, days, hours, minutes)) if v]
    return ''.join(components) or '0m'

演示:

>>> formattime(7480)
'3w4h40m'
>>> formattime(0)
'0m'