2012-05-16 25 views
13

Tengo algunos archivos de registro con horas en el formato HH: MM :: SS.nano_seconds (por ejemplo, 01: 02: 03.123456789). Me gustaría crear una fecha y hora en python para que pueda hacer las matemáticas en el tiempo (por ejemplo, tomar diferencias de tiempo). strptime funciona bien para microsegundos usando% f. ¿Los módulos de fecha y hora de Python realmente no admiten nanosegundos?Análisis de cadenas de fecha y hora que contienen nanosegundos

+0

posible duplicado de [¿Obtener tiempo POSIX/Unix en segundos y nanosegundos en Python?] (Http://stackoverflow.com/questions/2394485/get-posix-unix-time-in-seconds-and-nanoseconds-in -python) –

+0

@MikePennington Esa pregunta se refiere a obtener un tiempo de reloj con nanosegundos, no analizarlos y hacer cálculos matemáticos independientemente de un reloj real. – Dougal

+0

@Dougal, la pregunta es muy relevante ya que señalan que la precisión de tiempo en nanosegundos requiere soporte de plataforma, y ​​la mayoría no. En esa pregunta, también se discute el formato de cadenas de nanosegundos –

Respuesta

13

Puede ver from the source que los objetos de fecha y hora no admiten nada más fino que microsegundos. Como señaló Mike Pennington en los comentarios, esto es porque actual hardware clocks aren't nearly that precise. Wikipedia dice que HPET tiene frecuencia "al menos 10 MHz", lo que significa un tic por cada 100 nanosegundos.

Si puede vivir arrojando los últimos tres dígitos (que de todos modos no son demasiado significativos), puede analizar esto simplemente cortando la cadena de entrada para tener solo seis dígitos después del punto decimal y analizando con %f. De lo contrario, parece que tendrás que implementar la resta tú mismo.

+0

Gracias. Eso es lo que sospechaba. – user1332148

+9

El reloj del sistema no es la única fuente de tiempo con la que se puede usar datetime y timedelta. Es molesto (al borde de la idiotez miope) que no se implementen utilizando nsecs en lugar de usecs. – travc

+3

@travc: Hay un problema de CPython abierto: [el módulo de fecha y hora no admite nanosegundos] (https://bugs.python.org/issue15443) – jfs