258 votes

Formatage d'une date en une chaîne de caractères avec des millisecondes

Comment puis-je formater un datetime en tant que chaîne de caractères avec des millisecondes ?

1 votes

4 votes

Veuillez rédiger un titre décrivant votre problème et essayez de poser une question claire et précise.

2 votes

Il convient de mentionner ici qu'une précision supplémentaire est souvent très utile. Par exemple, la fonction Instant.parse peut analyser les représentations créées avec strftime('%Y-%m-%dT%H:%M:%S.%fZ')

503voto

Jeremy Moritz Points 529

Pour obtenir une chaîne de date avec des millisecondes, utilisez [:-3] pour découper les trois derniers chiffres de %f (microsecondes) :

>>> from datetime import datetime
>>> datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f')[:-3]
'2022-09-24 10:18:32.926'

Ou légèrement plus courte :

>>> from datetime import datetime
>>> datetime.utcnow().strftime('%F %T.%f')[:-3]

7 votes

Remarque : si vous souhaitez utiliser import datetime au lieu de from datetime import datetime vous devrez utiliser ceci : datetime.datetime.utcnow().strftime("%H:%M:%S.%f")

22 votes

Dans le cas où les microsecondes sont 0, dans l'implémentation de Windows 2.7, les microsecondes ne sont pas imprimées, ce qui réduit les secondes :(

1 votes

@cabbi, vous pouvez utiliser ceci à la place : (dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.') ; dt = "%s.%03d" % (dt, int(micro) / 1000) ; print dt . J'ai ajouté cette réponse.

120voto

Lorenzo Points 931

Avec Python 3.6+, vous pouvez définir isoformat 's timespec :

>>> from datetime import datetime
>>> datetime.utcnow().isoformat(sep=' ', timespec='milliseconds')
'2019-05-10 09:08:53.155'

2 votes

Utile aussi avec le fuseau horaire : date = datetime(2019,5,10) date_with_tz = pytz.timezone('Europe/Rome').localize(date) date_with_tz.isoformat(sep='T', timespec='milliseconds') output : '2019-05-10T00:00:00.000+02:00'

0 votes

Cela semble plus propre que l'option [:-3] dans la réponse acceptée, mais vous devez savoir qu'il fait apparemment la même chose. >>> datetime.fromisoformat('2021-12-08 20:00:00.678900').isoformat(sep=' ', timespec='milliseconds') conduit à '2021-12-08 20:00:00.678' . La troncature est-elle spécifiée dans la norme ISO ou s'agit-il simplement d'un bogue ? L'implémentation utilise la division entière : github.com/python/cpython/blob/

34voto

Sam Watkins Points 1299

@Cabbi a soulevé la question que sur certains systèmes (Windows avec Python 2.7 ), le format microsecondes %f peut donner à tort "0" Il n'est donc pas possible de se contenter de couper les trois derniers caractères. De tels systèmes ne suivent pas le comportement spécifié par la directive la documentation :

Directive

Signification

Exemple

%f

Microseconde sous forme de nombre décimal, complété par un zéro à 6 chiffres.

000000, 000001, , 999999

Le code suivant formate soigneusement un timestamp en millisecondes :

>>> from datetime import datetime
>>> (dt, micro) = datetime.utcnow().strftime('%Y-%m-%d %H:%M:%S.%f').split('.')
>>> "%s.%03d" % (dt, int(micro) / 1000)
'2016-02-26 04:37:53.133'

Pour obtenir le résultat exact souhaité par l'OP, nous devons supprimer les caractères de ponctuation :

>>> from datetime import datetime
>>> (dt, micro) = datetime.utcnow().strftime('%Y%m%d%H%M%S.%f').split('.')
>>> "%s%03d" % (dt, int(micro) / 1000)
'20160226043839901'

28voto

knitti Points 3258

Utilisation strftime :

>>> from datetime import datetime
>>> datetime.utcnow().strftime('%Y%m%d%H%M%S%f')
'20220402055654344968'

18 votes

Pour information, les microsecondes sont imprimées dans les 6 derniers chiffres. Ajouter [:-3] à la fin pour supprimer les 3 derniers chiffres afin de n'afficher que des millisecondes.

6 votes

Les microsecondes peuvent être inférieures à 6 chiffres, donc [:-3] imprime des millisecondes erronées

14 votes

Et si nous avions un fuseau horaire ?

8voto

N Fayçal Points 71

Utilisation [:-3] pour supprimer les 3 derniers caractères puisque %f est pour les microsecondes :

>>> from datetime import datetime
>>> datetime.now().strftime('%Y/%m/%d %H:%M:%S.%f')[:-3]
'2013/12/04 16:50:03.141'

1 votes

Comme indiqué dans d'autres réponses, si les microsecondes sont égales à 0, la partie ".123455" peut être imprimée comme ".0", ce qui entraîne une troncature des 3 derniers caractères pour manger le chiffre des secondes inférieur et ".0".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X