2012-05-16 7 views
13

Ho alcuni file di registro con orari nel formato HH: MM :: SS.nano_seconds (ad esempio 01: 02: 03.123456789). Mi piacerebbe creare un datetime in python in modo da poter fare ordinatamente matematica sul tempo (ad esempio, prendere differenze di tempo). strptime funziona bene per microsecondi utilizzando% f. I moduli Python datetime e time non supportano realmente i nanosecondi?Analisi di stringhe datetime contenenti nanosecondi

+0

possibile duplicato di [Ottieni tempo POSIX/Unix in secondi e nanosecondi in Python?] (Http://stackoverflow.com/questions/2394485/get-posix-unix-time-in-seconds-and-nanoseconds-in -python) –

+0

@MikePennington Quella domanda si occupa di ottenere un tempo di clock con nanosecondi, non di analizzarli e fare matematica su di essi indipendentemente da un orologio reale. – Dougal

+0

@Dougal, la domanda è molto pertinente dal momento che sottolineano che la precisione del tempo in nanosecondi richiede il supporto della piattaforma, e la maggior parte no. In questa domanda, viene discussa anche la formattazione delle stringhe di nanosecondi –

risposta

13

È possibile vedere from the source che gli oggetti datetime non supportano nulla più fine di microsecondi. Come sottolineato da Mike Pennington nei commenti, questo è dovuto al actual hardware clocks aren't nearly that precise. Wikipedia dice che HPET ha frequenza "almeno 10 MHz", che significa un tick per 100 nanosecondi.

Se riesci a vivere con l'eliminazione delle ultime tre cifre (che probabilmente non sono comunque significative), puoi analizzarlo tagliando semplicemente la stringa di input con solo sei cifre dopo il punto decimale e analizzando con %f. Altrimenti, sembra che dovrai implementare la sottrazione da solo.

+0

Grazie. Questo è quello che sospettavo. – user1332148

+9

L'orologio di sistema non è l'unica fonte di tempo che si potrebbe desiderare di utilizzare datetime e timedelta con. E 'fastidioso (confinando con l'idiozia miope) che non siano implementati usando nsecs invece di usecs. – travc

+3

@travc: C'è un problema CPython aperto: [il modulo datetime non ha supporto per i nanosecondi] (https://bugs.python.org/issue15443) – jfs