Во-первых, миллисекунды до 9 цифр не имеют никакого смысла. «Милли» означает «тысячные», как и в 3-х цифрах.
Во-вторых, у вас нет миллисекунд, у вас есть микросекунды. Тип datetime
имеет атрибут microseconds
, а %f
определяется как микросекунды. И, конечно, «микро» означает «миллионные», как и в 6 цифрах.
Поскольку в объекте нет сохраненных наносекунд, было бы бессмысленно иметь спецификатор формата наносекунд. Но если бы был спецификатор формата nanoseconds, это были бы только микросекунды с дополнительными тремя 0 в конце, которые вы можете сделать сами:
'%Y-%m%d %H:%M:%S.%f000'
В качестве альтернативы никто не заставляет вас использовать strfime
; вы всегда можете использовать str.format
и включить поле {:09}
и передать dt.microseconds * 1000
на него.