Python将timedeltas转换为字符串格式的小时数

时间:2013-04-01 10:43:17

标签: python string date time

我有一个3465小时的timedelta对象

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”?

2 个答案:

答案 0 :(得分:5)

请注意,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”,这是一种理智的格式,但不是你想要的。

答案 1 :(得分:0)

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

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