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

如何将python timedelta转换为前导为零的字符串,以便保留格式“0”;00:00:00“;(%HH:%MM:%SS),python,string,datetime,datetime-format,timedelta,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)的字符串 输出是 00:10:00 输出是 00:10:00 我们还可以使用time,然后使用strftime方法格式化 import datetime dt

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

td = datetime.timedelta(minutes=10)
如果打印为字符串,则显示时不带前导零,我希望:

t_str = string(td)
print(t_str)
# result: "0:10:00"
如何将其转换为保留格式为“00:10:00”(%HH:%MM:%SS)的字符串

输出是

00:10:00
输出是

00:10:00

我们还可以使用
time
,然后使用
strftime
方法格式化

import datetime

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

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

我们还可以使用
time
,然后使用
strftime
方法格式化

import datetime

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

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

这有点棘手,因为负值以及大于一天的值的行为更复杂

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

一个完全不同的方法是

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)))
这给出了与上面相同的结果


哪一个更优雅,留给读者作为练习。

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

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

一个完全不同的方法是

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)))
这给出了与上面相同的结果


哪一个更优雅,留给读者作为练习。

10分钟就是一个例子;解决方案需要扩展以在任何给定时间内保持格式一致。10分钟就是一个例子;解决方案需要扩展以在任何给定时间保持格式一致。请参阅GLGL提出的影响此方法的问题。请参阅GLGL提出的影响此方法的问题。是的,最简单的方法是使用字符串对其进行硬编码:
if len(t_str)<8:t_str='0'+t_str
@Jaydog但是微秒和天数的问题呢?两者都使字符串变长,而不满足所需条件。是的,最简单的方法是使用字符串对其进行硬编码:
如果len(t_str)<8:t_str='0'+t_str
@Jaydog,那么微秒和天数的问题呢?两者都使字符串变长,但不满足要求的条件。很好,谢谢。我认为我在python中缺少了一些关于时间格式的有用信息,但是如果这是一个字符串操作的问题,我可能会接受
if len(t_str)<8:t_str='0'+t_str
@Jaydog,但是您的简单解决方案不能满足“解决方案需要扩展以在任何给定时间内保持格式一致”。我理解,好地方@glglgl。简单的解决方案实际上只限于整秒钟,而天数的问题是个问题。谢谢,很好,谢谢。我认为我在python中缺少了一些关于时间格式的有用信息,但是如果这是一个字符串操作的问题,我可能会接受
if len(t_str)<8:t_str='0'+t_str
@Jaydog,但是您的简单解决方案不能满足“解决方案需要扩展以在任何给定时间内保持格式一致”。我理解,好地方@glglgl。简单的解决方案实际上只限于整秒钟,而天数的问题是个问题。谢谢