Je suis capable d'analyser des chaînes contenant la date / l'heure avec time.strptime
>>> import time
>>> time.strptime('30/03/09 16:31:32', '%d/%m/%y %H:%M:%S')
(2009, 3, 30, 16, 31, 32, 0, 89, -1)
Comment analyser une chaîne temporelle contenant des millisecondes?
>>> time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
data_string[found.end():])
ValueError: unconverted data remains: .123
python
date
time
datetime-parsing
ilkinules
la source
la source
%f
.%f
est rempli de zéros à droite (pas à gauche!) À 6 décimales. 1 est analysé à 100000, 12 est analysé à 120000 et 1234567 produitValueError: unconverted data remains: 7
Je sais que c'est une question plus ancienne mais j'utilise toujours Python 2.4.3 et j'avais besoin de trouver un meilleur moyen de convertir la chaîne de données en un datetime.
La solution si datetime ne prend pas en charge% f et sans avoir besoin de try / except est:
Cela fonctionne pour la chaîne d'entrée "2010-10-06 09: 42: 52.266000"
la source
dt.replace(microsecond=int(mSecs))
Pour donner le code auquel la réponse de nstehr fait référence (à partir de sa source ):
la source
La réponse DNS ci - dessus est en fait incorrecte. Le SO demande des millisecondes mais la réponse est pour les microsecondes. Malheureusement, Python n'a pas de directive pour les millisecondes, juste des microsecondes (voir doc ), mais vous pouvez contourner cela en ajoutant trois zéros à la fin de la chaîne et en analysant la chaîne en microsecondes, quelque chose comme:
où
time_str
est formaté comme30/03/09 16:31:32.123
.J'espère que cela t'aides.
la source
.123
Ma première pensée a été d'essayer de le passer '30 / 03/09 16: 31: 32.123 '(avec un point au lieu d'un deux-points entre les secondes et les millisecondes.) Mais cela n'a pas fonctionné. Un rapide coup d'œil aux documents indique que les fractions de seconde sont ignorées dans tous les cas ...
Ah, les différences de version. Cela a été signalé comme un bug et maintenant en 2.6+, vous pouvez utiliser "% S.% f" pour l'analyser.
la source
à partir des listes de diffusion python: analyse du thread milliseconde . Il y a une fonction publiée ici qui semble faire le travail, bien que, comme mentionné dans les commentaires de l'auteur, c'est une sorte de piratage. Il utilise des expressions régulières pour gérer l'exception qui est déclenchée, puis effectue certains calculs.
Vous pouvez également essayer de faire les expressions régulières et les calculs à l'avance, avant de les passer à strptime.
la source
Pour Python 2, je l'ai fait
il imprime le temps "% H:% M:% S", divise le time.time () en deux sous-chaînes (avant et après le.) xxxxxxx.xx et puisque .xx sont mes millisecondes j'ajoute la deuxième sous-chaîne à mon "% H:% M:% S "
espérons que cela a du sens :) Exemple de sortie:
13: 31: 21.81 FIN DU CLIGNOTANT 01
13: 31: 26.3 Clignotement 01
13: 31: 26.39 FIN DU BLINK 01
13: 31: 34.65 Départ Lane 01
la source