我使用以下内容打印出时间戳:
strftime('%d-%m-%Y %H:%M:%S.%f')
但是我希望将微秒数舍入到两位小数而不是打印到六位小数。是否有更简单的方法来实现这一点,而不是“解压缩”所有时间元素,格式化并将微秒四舍五入为2位小数,并格式化新的“打印字符串”?
答案 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]