将持续时间格式化为周、天、小时、分钟
Format duration in minutes as weeks, days, hours, minutes
我有一个以分钟为单位的经过时间列表,我正在尝试将它们重新格式化为周、天、小时和分钟的字符串。
因此,例如,7,480 分钟 = 3 周 4 小时 40 分钟。
我希望格式如下:'3w4h40m'
我使用 divmod
编写了一个函数,将分钟分解为周、天、小时和分钟,return 字符串:
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
但是,如果数字为零,我不希望它 return 任何周、天、小时或分钟的数字:
>>> formattime(7480)
'3w0d4h40m'
是否有一种 pythonic 和直接的方法 returning '3w4h40m'
?
如果你有它们的列表,你可以过滤掉 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'
我有一个以分钟为单位的经过时间列表,我正在尝试将它们重新格式化为周、天、小时和分钟的字符串。
因此,例如,7,480 分钟 = 3 周 4 小时 40 分钟。
我希望格式如下:'3w4h40m'
我使用 divmod
编写了一个函数,将分钟分解为周、天、小时和分钟,return 字符串:
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
但是,如果数字为零,我不希望它 return 任何周、天、小时或分钟的数字:
>>> formattime(7480)
'3w0d4h40m'
是否有一种 pythonic 和直接的方法 returning '3w4h40m'
?
如果你有它们的列表,你可以过滤掉 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'