日期时间:以微秒为单位舍入/修剪位数

2024-02-28

目前我正在记录内容,并且正在使用我自己的格式化程序和自定义formatTime():

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

我的问题是微秒,%f, 是六位数字。有没有办法吐出更少的数字,比如微秒的前三位数字?


最简单的方法是使用切片来截断微秒的最后三位数字:

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

显然你可以用更少的变量来简化上面的过程;我只是希望它很容易理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

日期时间:以微秒为单位舍入/修剪位数 的相关文章

随机推荐