microseconds
仅当对象的属性中存在非零值时,它才会打印微秒datetime.timedelta
。
如果您想要不同的行为,请编写您自己的字符串格式化函数。就像是:
def delta_to_string(tdelta):
return '%s days, %02d:%02d:%09.6f' % (
tdelta.days,
tdelta.seconds / 3600,
(tdelta.seconds / 60) % 60,
(tdelta.seconds % 60) + (tdelta.microseconds / 10**6.))
格式表示浮点数总共 9 位,%09.6f
包括小数,必要时添加前导 0,小数部分最多 6 位。如果您想要更多或更少的数字,则必须同时更改总位数和小数部分 - 10 位小数将是%013.10f
.
这将打印对象的每个部分timedelta
。让我们尝试一下:
>>> delta_to_string((datetime.datetime.now() - datetime.datetime.now()))
'0 days, 00:00:00.000000'
如果天数为 0,我认为您想保留不打印天数的功能......
def delta_to_string(tdelta):
return '%s%02d:%02d:%09.6f' % (
('%s days, ' % tdelta.days) if tdelta.days else '',
tdelta.seconds / 3600,
(tdelta.seconds / 60) % 60,
(tdelta.seconds % 60) + (tdelta.microseconds / 10**6.))
现在结果是:
>>> s1 = datetime.datetime.now()
>>> s2 = datetime.datetime.now()
>>> delta_to_string(s1 - s2)
'-1 days, 23:59:57.387000'
>>> print (s1 - s2)
-1 day, 23:59:57.387000
>>> delta_to_string(s2 - s1)
'00:00:02.613000'
>>> print (s2 - s1)
0:00:02.613000
>>> delta_to_string(s2 - s2)
'00:00:00.000000'
>>> print (s2 - s2)
0:00:00
与内置str函数的行为方式不同......我将把这些差异作为“读者练习”。