将微秒格式化为两位小数(实际上将微秒转换为数十微秒)

时间:2014-10-27 11:51:03

标签: python python-2.7 datetime

我使用以下内容打印出时间戳:

strftime('%d-%m-%Y %H:%M:%S.%f')

但是我希望将微秒数舍入到两位小数而不是打印到六位小数。是否有更简单的方法来实现这一点,而不是“解压缩”所有时间元素,格式化并将微秒四舍五入为2位小数,并格式化新的“打印字符串”?

3 个答案:

答案 0 :(得分:2)

你必须绕自己;使用字符串格式化格式化日期而不是微秒,然后分别添加microsecond属性的前两位数字:

'{:%d-%m-%Y %H:%M:%S}.{:02.0f}'.format(dt, dt.microsecond / 10000.0)

演示:

>>> from datetime import datetime
>>> dt = datetime.now()
>>> '{:%d-%m-%Y %H:%M:%S}.{:02.0f}'.format(dt, dt.microsecond / 10000.0)
'27-10-2014 11:56:32.72'

答案 1 :(得分:0)

decimal_places = 2
ndigits = decimal_places - 6
assert ndigits < 0
d = d.replace(microsecond=round(d.microsecond, ndigits))
print(d.strftime('%d-%m-%Y %H:%M:%S.%f')[:ndigits])
# -> 2014-10-27 11:59:53.87

答案 2 :(得分:0)

根据jfs的回答,我又添加了一条语句

replace(microsecond=round(d.microsecond, ndigits))

可能会出现错误: ValueError:微秒必须在0..999999 中。

即如果微秒是从995000到999999轮(微秒,n位数字),则将为1000000。

d = datetime.utcfromtimestamp(time.time())
decimal_places = 2
ndigits = decimal_places - 6
r = round(d.microsecond, ndigits)
if r > 999999:
    r = 999999
d = d.replace(microsecond=r)
ts = d.strftime('%Y-%m-%dT%H:%M:%S.%f')[:ndigits]