如何将timedelta微秒格式设置为2个十进制数字?

时间:2019-05-17 19:17:24

标签: python python-3.x datetime

运行此

import time
import datetime

timenow = time.time()
timedifference = time.time() - timenow
timedifference = datetime.timedelta( seconds=timedifference )
print( "%s" % timedifference )

我明白了:

0:00:00.000004

如何使用deltatime对象将微秒修整为2个十进制数字?

0:00:00.00

相关问题:

  1. Timedelta in hours,minutes,seconds,microseconds format
  2. Formatting microseconds to two decimal places (in fact converting microseconds into tens of microseconds)

3 个答案:

答案 0 :(得分:2)

另一种解决方案是将小数部分以数字方式拆分并单独格式化:

>>> seconds = 123.995
>>> isec, fsec = divmod(round(seconds*100), 100)
>>> "{}.{:02.0f}".format(timedelta(seconds=isec), fsec)
'0:02:04.00'

如您所见,这负责四舍五入。通过将上面的 100 更改为 10 的另一个幂(并调整格式字符串)也可以轻松调整输出精度:

def format_td(seconds, digits=2):
    isec, fsec = divmod(round(seconds*10**digits), 10**digits)
    return ("{}.{:0%d.0f}" % digits).format(timedelta(seconds=isec), fsec)

答案 1 :(得分:1)

使用str()将时间差转换为字符串,然后使用.split('.')在小数点的两侧分开。然后用[0]将第一部分保留在小数点前:

您的示例与最后一行唯一的不同:

import time
import datetime

timenow = time.time()
timedifference = time.time() - timenow
timedifference = datetime.timedelta( seconds=timedifference )
print( "%s" % str(timedifference).split('.')[0] )

生成:

0:00:00

答案 2 :(得分:0)

您必须自行格式化。 timedelta对象包含dayssecondsmicroseconds,因此您必须进行数学运算以将其转换为天/小时/分钟/秒/微秒,然后使用python string.format。对于您的微秒,您将希望((microsec+5000)/10000)获得前两位数字(+5000用于四舍五入)。