datetime:舍入/修剪位数,以微秒为单位

发布于 2021-01-29 17:46:26

目前,我正在记录东西,并且正在使用带有自定义的格式化程序formatTime()

def formatTime(self, _record, _datefmt):
    t = datetime.datetime.now()
    return t.strftime('%Y-%m-%d %H:%M:%S.%f')

我的问题是微秒%f为六位数。无论如何,是否需要吐出更少的数字,例如微秒的前三个数字?

关注者
0
被浏览
48
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    最简单的方法是使用切片将微秒的最后三位数字切掉:

    def format_time():
        t = datetime.datetime.now()
        s = t.strftime('%Y-%m-%d %H:%M:%S.%f')
        return s[:-3]
    

    我强烈建议切碎。我曾经写过一些对时间戳进行四舍五入而不是四舍五入的记录代码,当四舍五入改变了最后一位时,我发现它实际上有点令人困惑。定时代码在某个时间戳记时停止运行,但是由于舍入的缘故,存在带有该时间戳记的日志事件。切碎更简单,更可预测。

    如果您想实际舍入数字而不是仅切碎,则需要做更多的工作,但并不可怕:

    def format_time():
        t = datetime.datetime.now()
        s = t.strftime('%Y-%m-%d %H:%M:%S.%f')
        head = s[:-7] # everything up to the '.'
        tail = s[-7:] # the '.' and the 6 digits after it
        f = float(tail)
        temp = "{:.03f}".format(f)  # for Python 2.x: temp = "%.3f" % f
        new_tail = temp[1:] # temp[0] is always '0'; get rid of it
        return head + new_tail
    

    显然,您可以使用更少的变量来简化上述操作;我只是希望它很容易遵循。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看