首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将微秒格式化为小数点后的两位(实际上将微秒转换为数十微秒)

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

Stack Overflow用户
提问于 2014-10-27 11:51:02
回答 3查看 3.2K关注 0票数 2

我正在使用以下方法打印时间戳:

代码语言:javascript
复制
strftime('%d-%m-%Y %H:%M:%S.%f')

但是,我想把微秒舍入小数点后的两位,而不是打印到小数点后的六位。是否有更简单的方法来实现这一点,而不是“解压”所有的时间元素,格式化和舍入微秒到2小数点,以及格式化一个新的‘打印字符串’?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-10-27 12:01:32

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2014-10-27 11:57:23

您将不得不舍入自己;使用字符串格式设置日期的格式,不需要微秒,然后分别添加microsecond属性的前两位数:

代码语言:javascript
复制
'{:%d-%m-%Y %H:%M:%S}.{:02.0f}'.format(dt, dt.microsecond / 10000.0)

演示:

代码语言:javascript
复制
>>> 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'
票数 4
EN

Stack Overflow用户

发布于 2018-09-07 04:47:45

基于jfs的回答,我又添加了一条语句作为

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

可能会出现错误: ValueError: microsecond必须在0.999999中。

也就是说,如果微秒为995000到999999圆(微秒,数字),则为1000000。

代码语言:javascript
复制
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]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26586943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档