如何将python timedelta转换为具有前导零的字符串,以便保留格式“ 00:00:00”(%HH:%MM:%SS)

时间:2019-11-19 15:27:22

标签: python string datetime datetime-format timedelta

给出python中的时间增量,例如:

td = datetime.timedelta(minutes=10)

如果以字符串形式打印,它将显示为没有我想要的前导零:

t_str = string(td)
print(t_str)
# result: "0:10:00"

如何将其转换为保留“ 00:10:00”(%HH:%MM:%SS)格式的字符串?

4 个答案:

答案 0 :(得分:3)

"{:0>8}".format(str(td))
# result: "00:10:00"

答案 1 :(得分:1)

td = datetime.timedelta(minutes=10)
time = '0'+str(td)
print(time)

输出为

00:10:00

答案 2 :(得分:1)

我们还可以使用time,然后使用标准strftime方法进行格式化。

import datetime

dt = datetime.time(0,10,0)

dt.strftime('%H:%M:%S)

答案 3 :(得分:1)

这有点棘手,因为负值以及超过一天的值的行为更加复杂。

def str_td(td):
    s = str(td).split(", ", 1)
    a = s[-1]
    if a[1] == ':':
        a = "0" + a
    s2 = s[:-1] + [a]
    return ", ".join(s2)

print(str_td(datetime.timedelta(minutes=10)))
print(str_td(datetime.timedelta(minutes=3200)))
print(str_td(datetime.timedelta(minutes=-1400)))
print(str_td(datetime.timedelta(seconds=4003.2)))
print(str_td(datetime.timedelta(seconds=86401.1)))

给予

00:10:00
2 days, 05:20:00
-1 day, 00:40:00
01:06:43.200000
1 day, 00:00:01.100000

一种完全不同的方法是

def str_td(td):
    s = str(td).split(", ", 1)
    t = datetime.time(td.seconds // 3600,td.seconds // 60 % 60,td.seconds % 60, td.microseconds)
    s2 = s[:-1] + [str(t)]
    return ", ".join(s2)

print(str_td(datetime.timedelta(minutes=10)))
print(str_td(datetime.timedelta(minutes=3200)))
print(str_td(datetime.timedelta(minutes=-1400)))
print(str_td(datetime.timedelta(seconds=4003.2)))
print(str_td(datetime.timedelta(seconds=86401.1)))

给出与上面相同的结果。

哪一种更优雅?留给读者练习。