Puedo analizar cadenas que contienen fecha / hora con 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)
¿Cómo puedo analizar una cadena de tiempo que contiene milisegundos?
>>> 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
ilkinulas
fuente
fuente
%f
.%f
se rellena con ceros a la derecha (¡no a la izquierda!) Con 6 decimales. 1 se analiza a 100000, 12 se analiza a 120000 y 1234567 produceValueError: unconverted data remains: 7
Sé que esta es una pregunta anterior, pero todavía estoy usando Python 2.4.3 y necesitaba encontrar una mejor manera de convertir la cadena de datos a una fecha y hora.
La solución si datetime no admite% f y sin necesidad de probar / excepto es:
Esto funciona para la cadena de entrada "2010-10-06 09: 42: 52.266000"
fuente
dt.replace(microsecond=int(mSecs))
Para dar el código al que se refiere la respuesta de nstehr (desde su fuente ):
fuente
La respuesta DNS anterior es realmente incorrecta. El SO pregunta por milisegundos, pero la respuesta es por microsegundos. Desafortunadamente, Python`s no tiene una directiva para milisegundos, solo microsegundos (ver documento ), pero puede solucionarlo agregando tres ceros al final de la cadena y analizando la cadena como microsegundos, algo así como:
donde
time_str
está formateado como30/03/09 16:31:32.123
.Espero que esto ayude.
fuente
.123
Mi primer pensamiento fue intentar pasarlo '30 / 03/09 16: 31: 32.123 '(con un punto en lugar de dos puntos entre los segundos y los milisegundos). Pero eso no funcionó. Un rápido vistazo a los documentos indica que los segundos fraccionarios se ignoran en cualquier caso ...
Ah, diferencias de versión. Esto se informó como un error y ahora en 2.6+ puede usar "% S.% f" para analizarlo.
fuente
de las listas de correo de Python: análisis de hilos de milisegundos . Hay una función publicada allí que parece hacer el trabajo, aunque como se menciona en los comentarios del autor, es una especie de truco. Utiliza expresiones regulares para manejar la excepción que se genera, y luego hace algunos cálculos.
También puede intentar hacer las expresiones regulares y los cálculos por adelantado, antes de pasarlo a strptime.
fuente
Para Python 2 hice esto
imprime el tiempo "% H:% M:% S", divide el time.time () en dos subcadenas (antes y después de.) xxxxxxx.xx y como .xx son mis milisegundos, agrego la segunda subcadena a mi "% H:% M:% S "
espero que tenga sentido :) Ejemplo de salida:
13: 31: 21.81 FIN DE BLINK 01
13: 31: 26.3 Parpadeo 01
13: 31: 26.39 FIN DE BLINK 01
13: 31: 34.65 Carril inicial 01
fuente