我现在有这个问题,想知道是否有一种更清洁的方法来完成它,或者它是否已经尽可能紧凑。

 h = "%s" % str(h) if h >= 10 else "0%s" % str(h)
 m = "%s" % str(m) if m >= 10 else "0%s" % str(m)
 s = "%s" % str(s) if s >= 10 else "0%s" % str(s)
 print("{}:{}:{}".format(h, m, s))


评论

将零填充到字符串的最好方法可能是您感兴趣的。但是您也可以考虑使用datetime.time类,该类具有一些不错的字符串转换选项。

我实际上是在使用datetime来获取这些时间,这在我看来没有发生,它可以将它们转换为字符串。谢谢!

您提到您正在使用datetime来获取这些时间,但是究竟如何呢? Python的日期时间有很多格式代码,例如%M for Minute为零填充的十进制数字。

#1 楼

%格式运算符已经支持0填充,只需将宽度指定为02即可。此外,您还可以传递一个元组以将多个数字以一种单一格式组合到同一个字符串中:格式字符串直接引用变量。使用此类格式化的字符串文字或f字符串,格式将表示为:"%02d:%02d:%02d" % (h, m, s)。正如注释中指出的那样,如果您从format对象开始,则可以使用它们而是拥有自己的格式化功能。

#2 楼

使用format方法。适用于所有当前的Python版本。

'{:02d}:{:02d}:{:02d}'.format(h, m, s)


在此处了解有关字符串格式的更多信息。

#3 楼

总结其他答案,这里有解决问题的不同方法。

datetime.datetimedatetime.time对象:

t = datetime.time(23, 59, 10)  # Example




在对象上调用strftime()方法:

print( t.strftime("%H:%M:%S") )



使用str.format()方法:

print( "{:%H:%M:%S}".format(t) )



(您还可以选择小时的12小时表示法;请参阅文档。)

从3个单独的整数中:

h = 23  # Example
m = 59  # Example
s = 10  # Example




非常手动格式化:

h = ("0" if h < 10 else "") + str(h)
m = ("0" if m < 10 else "") + str(m)
s = ("0" if s < 10 else "") + str(s)
print( h + ":" + m + ":" + s )



使用str.zfill()格式运算符:

h = str(h).zfill(2)
m = str(m).zfill(2)
s = str(s).zfill(2)
print( h + ":" + m + ":" + s )



使用%方法:

print( "%02d:%02d:%02d" % (h, m, s) )



使用格式化的字符串文字(Python 3.6+):

print( "{:02}:{:02}:{:02}".format(h, m, s) )




#4 楼

如上面的评论中所述,使用datetime模块可提供所有这些功能:

from datetime import time
h = 21
m = 6
s = 32
output_string = time(h, m, s).strftime("%H:%M:%S")


如果您正在寻找受支持的字符串格式的完整列表。