Форматирование микросекунд до двух знаков после запятой (фактически преобразование микросекунд в десятки микросекунд)

Я использую следующее для печати временных меток:

strftime('%d-%m-%Y %H:%M:%S.%f')

Однако я хочу округлить микросекунды до двух знаков после запятой, а не печатать до шести знаков после запятой. Есть ли более простой способ добиться этого, а не "распаковывать" все элементы времени, форматировать и округлять микросекунды до двух десятичных знаков и форматировать новую "строку печати"?

Ответ 1

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

Вам придется обойти себя; используйте форматирование строк для форматирования даты без микросекунд, затем добавьте две верхние цифры атрибута 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'