2

我有一个 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”?

4

2 回答 2

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

于 2013-04-01T10:54:34.347 回答
0

正如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))
于 2013-04-01T11:42:46.550 回答