La manière la plus simple serait d'utiliser le tranchage pour simplement couper les trois derniers chiffres des microsecondes :
def format_time():
t = datetime.datetime.now()
s = t.strftime('%Y-%m-%d %H:%M:%S.%f')
return s[:-3]
Je recommande fortement de simplement couper. J'ai déjà écrit du code de journalisation qui arrondissait les horodatages au lieu de les couper, et j'ai trouvé que c'était en fait un peu déroutant lorsque l'arrondi changeait le dernier chiffre. Il y avait du code chronométré qui s'arrêtait à un certain horodatage et pourtant il y avait des événements de journal avec cet horodatage en raison de l'arrondi. Plus simple et plus prévisible de simplement couper.
Si vous voulez vraiment arrondir le nombre plutôt que simplement le couper, c'est un peu plus de travail mais pas horrible :
def format_time():
t = datetime.datetime.now()
s = t.strftime('%Y-%m-%d %H:%M:%S.%f')
head = s[:-7] # tout jusqu'au '.'
tail = s[-7:] # le '.' et les 6 chiffres qui suivent
f = float(tail)
temp = "{:.03f}".format(f) # pour Python 2.x: temp = "%.3f" % f
new_tail = temp[1:] # temp[0] est toujours '0'; s'en débarrasser
return head + new_tail
Vous pouvez évidemment simplifier ce qui précède avec moins de variables ; je voulais juste que ce soit très facile à suivre.