将timedelta格式化为字符串

2024-04-19 19:38:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Python新手(2周),格式化一个datetime.timedelta对象时遇到问题。

我要做的是: 我有一个对象列表,对象类的一个成员是timedelta对象,它显示事件的持续时间。我想以小时:分钟的格式显示该持续时间。

我试过各种方法来做这件事,但我有困难。我当前的方法是将返回小时和分钟的对象的方法添加到类中。我可以将timedelta.seconds除以3600并四舍五入得到小时数。我在获取剩余秒数并将其转换为分钟数时遇到问题。

顺便说一下,我用Google AppEngineDjango Templates来演示。


Tags: 对象方法列表datetime格式google事件成员
3条回答
>>> str(datetime.timedelta(hours=10.56))
10:33:36

>>> td = datetime.timedelta(hours=10.505) # any timedelta object
>>> ':'.join(str(td).split(':')[:2])
10:30

timedelta对象传递给str()函数调用的格式化代码与我们简单键入print td时使用的格式化代码相同。既然你不需要秒数,我们可以用冒号(3个部分)将字符串拆分,然后只将前2个部分放回一起。

如您所知,您可以通过访问.seconds属性从timedelta对象获取总秒数。

Python提供内置函数divmod(),它允许:

s = 13420
hours, remainder = divmod(s, 3600)
minutes, seconds = divmod(remainder, 60)
print '{:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds))
# result: 03:43:40

或者可以使用模和减的组合将其转换为小时和余数:

# arbitrary number of seconds
s = 13420
# hours
hours = s // 3600 
# remaining seconds
s = s - (hours * 3600)
# minutes
minutes = s // 60
# remaining seconds
seconds = s - (minutes * 60)
# total time
print '{:02}:{:02}:{:02}'.format(int(hours), int(minutes), int(seconds))
# result: 03:43:40

您可以使用str()将timedelta转换为字符串。下面是一个例子:

import datetime
start = datetime.datetime(2009,2,10,14,00)
end   = datetime.datetime(2009,2,10,16,00)
delta = end-start
print(str(delta))
# prints 2:00:00

相关问题 更多 >