Ответ 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
Я использую следующее для печати временных меток:
strftime('%d-%m-%Y %H:%M:%S.%f')
Однако я хочу округлить микросекунды до двух знаков после запятой, а не печатать до шести знаков после запятой. Есть ли более простой способ добиться этого, а не "распаковывать" все элементы времени, форматировать и округлять микросекунды до двух десятичных знаков и форматировать новую "строку печати"?
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
Вам придется обойти себя; используйте форматирование строк для форматирования даты без микросекунд, затем добавьте две верхние цифры атрибута 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'