【问题标题】:Python convert timedeltas into hours in string formatPython 将 timedeltas 转换为字符串格式的小时数
【发布时间】:2013-04-01 10:43:16
【问题描述】:

我有一个 timedelta 对象,它是 3457 小时

timedelta(hours=3457)

我想用“HH:MM”格式表示,也就是“3457:00”

我愿意:

from datetime import datetime
hours = timedelta(hours=3457)
hours_string =  time.strftime("%H:%M", time.gmtime(hours.seconds))
print hours_string

"01:00"

我怎样才能得到“3457:00”?

【问题讨论】:

    标签: python string date time


    【解决方案1】:

    请注意,3457:00 是一种无意义的格式。 “小时-冒号-分钟”格式用于日期和时间,因此小时不能合理地高于 23。更合理的格式是:3457h 0m。

    你可以这样得到:

    from datetime import timedelta
    
    delta = timedelta(hours=3457)
    minutes, seconds = divmod(delta.seconds, 60)
    hours, minutes = divmod(minutes, 60)
    hours += delta.days * 24
    
    print '%sh %sm' % (hours, minutes)
    

    当然,更简单的方法是:

    from datetime import timedelta
    
    delta = timedelta(hours=3457)
    print delta
    

    但这会给你“144 天,1:00:00”,这是一种合理的格式,但不是你想要的。

    【讨论】:

    • 谢谢,但在 Excel 中,我们可以添加小时数并获得类似“3457:45”的值。最好的问候
    • @alwbtc:嗯,这不是 Excel,所以没必要太简洁。但是,如果您愿意,当然可以使用该格式。
    【解决方案2】:

    正如 timedelta 文档所述,只有 dayssecondsmicroseconds 存储在内部 - 这意味着您必须手动将它们转换为您想要的单位(小时和分钟)。这是一种方法:

    from datetime import timedelta
    
    d = timedelta(hours=3457, minutes=42)
    wholehours, seconds = divmod(d.seconds, 60*60)
    wholeminutes = seconds//60
    deltahours = d.days*24 + wholehours
    print('{:d}:{:02d}'.format(deltahours, wholeminutes))
    # 3457:42
    

    这是一个产生相同结果的更简单的替代方案:

    def deltatime_hours_mins(dt, sep=':'):
        secs = int(dt.total_seconds())
        return '{:d}{}{:02d}'.format(secs//3600, sep, secs//60 % 60)
    
    print(deltatime_hours_mins(d))
    

    【讨论】:

    • 这会给你几小时:几秒,这几乎是不可能的。
    猜你喜欢
    • 2011-11-18
    • 2013-02-04
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2022-06-27
    • 2012-11-05
    • 1970-01-01
    • 2021-11-09
    相关资源
    最近更新 更多