如何在 strftime() 中将毫秒截断为 2 个最重要的小数

How can I truncate milliseconds to 2 most significant decimals in strftime()

我有一个日期时间对象,打印有:

from datetime import datetime

ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").strip()
print('TS: {}'.format(ts))

# "2020-12-03 02:13:27.823467"

但是,我只想显示 毫秒 的前 2 位数字,如下所示:2020-12-03 02:13:27.82。使用“%.2f”没有用,也许还有另一个time函数更合适?

在不引入(可能滞后的)正则表达式字符串操作的情况下执行此操作的最佳方法是什么?

Aaahi,答案很简单!使用字符串选择。

ts = datetime.now().strftime("%Y-%m-%d %H:%M:%S.%f").strip()[:-4]

像下面这样的事情呢?

import datetime


now = datetime.datetime.now()
ts = now.strftime('%Y-%m-%d %H:%M:%S') + '.{:02d}'.format(round(now.microsecond, -4))[:3]
print('TS: {}'.format(ts))
# TS: 2020-12-03 01:22:01.86

编辑

也许更好的参数化解决方案是:

import datetime


def largest_digits(value, num_digits=2, max_digits=6):
    discard_digits = num_digits - max_digits 
    base = 10 ** -discard_digits
    return f'{round(value, discard_digits) // base:02d}'


now = datetime.datetime.now()
ts = now.strftime('%Y-%m-%d %H:%M:%S') + '.' + largest_digits(now.microsecond, 2)
print('TS: {}'.format(ts))
# TS: 2020-12-03 01:22:01.86