如何将 python timedelta 转换为具有前导零的字符串,以使其保留格式“00:00:00”(%HH:%MM:%SS)
How to convert a python timedelta to a string that has a leading zero so it retains the format "00:00:00" (%HH:%MM:%SS)
给定 python 中的时间增量,例如:
td = datetime.timedelta(minutes=10)
如果作为字符串打印,它没有前导零,我想要:
t_str = string(td)
print(t_str)
# result: "0:10:00"
如何将其转换为保留“00:10:00”格式的字符串 (%HH:%MM:%SS)?
td = datetime.timedelta(minutes=10)
time = '0'+str(td)
print(time)
输出为
00:10:00
"{:0>8}".format(str(td))
# result: "00:10:00"
我们也可以使用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)))
给予
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)))
结果与上面相同。
哪个更优雅留给reader练习。
不到 24 小时工作良好
print(str(datetime.timedelta(minutes=10)).zfill(8))
"00:10:00"
当你超过24小时时,看起来像
print(str(datetime.timedelta(minutes=1445)).zfill(8))
"1 day, 0:05:00"
给定 python 中的时间增量,例如:
td = datetime.timedelta(minutes=10)
如果作为字符串打印,它没有前导零,我想要:
t_str = string(td)
print(t_str)
# result: "0:10:00"
如何将其转换为保留“00:10:00”格式的字符串 (%HH:%MM:%SS)?
td = datetime.timedelta(minutes=10)
time = '0'+str(td)
print(time)
输出为
00:10:00
"{:0>8}".format(str(td))
# result: "00:10:00"
我们也可以使用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)))
给予
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)))
结果与上面相同。
哪个更优雅留给reader练习。
不到 24 小时工作良好
print(str(datetime.timedelta(minutes=10)).zfill(8))
"00:10:00"
当你超过24小时时,看起来像
print(str(datetime.timedelta(minutes=1445)).zfill(8))
"1 day, 0:05:00"