Skip to main content
 首页 » 编程设计

python之可读的时间格式(语法良好!)

2025年05月04日24bonelee

我一直在阅读有关转换输入秒数的方法的帖子,这些方法应该输出为具有给定持续时间(小时、分钟、秒)的正式字符串。但是我想知道如何格式化它以便它解释单数化/复数化,例如,当我知道 62 秒应该读作 "1 分 2 秒" 而不是 120 秒,后者只是 “2 分钟”。

另一个标准是,如果秒数为 0,它应该返回 "now"。

到目前为止,这是我的代码:

def format_duration(seconds, granularity = 2): 
    intervals = (('hours', 3600), ('minutes', 60), ('seconds', 1)) 
    human_time = [] 
    for name, count in intervals:  
        value = seconds // count 
        if value:  
            seconds -= value * count 
            if value == 1: 
                name = name.rstrip('s') 
            human_time.append("{} {}".format(value, name)) 
        else: 
            return "now" 
    return ','.join(human_time[:granularity]) 

求助!谢谢!

乔丹

请您参考如下方法:

您的代码已经运行良好,只是您的return "now" 有一个问题,我已在下面的代码中修复了该问题。您还希望您的代码做什么?

def prettyList(human_time): 
    if len(human_time) > 1: 
        return ' '.join([', '.join(human_time[:-1]), "and", human_time[-1]]) 
    elif len(human_time) == 1: 
        return human_time[0] 
    else: 
        return "" 
 
def format_duration(seconds, granularity = 2): 
    intervals = (('hours', 3600), ('minutes', 60), ('seconds', 1)) 
    human_time = [] 
    for name, count in intervals:  
        value = seconds // count 
        if value:  
            seconds -= value * count 
            if value == 1: 
                name = name.rstrip('s') 
            human_time.append("{} {}".format(value, name)) 
    if not human_time: 
        return "now" 
    human_time = human_time[:granularity] 
    return prettyList(human_time) 

编辑:所以我添加了一个函数来美化输出,列表中的最后一项将由“and”分隔,所有其他项之前由逗号分隔。即使您在代码中添加更多间隔(如 ('days', 86400)),这仍然有效。输出现在看起来像 2 小时 1 分 43 秒 或 25 分 14 秒。