now libreria comando python time posix

libreria - Obtenga tiempo POSIX/Unix en segundos y nanosegundos en Python?



time.clock python (6)

He estado tratando de encontrar la manera de obtener el tiempo desde 1970-01-01 00:00:00 UTC en segundos y nanosegundos en python y no encuentro nada que me proporcione la precisión adecuada.

He intentado usar el módulo de tiempo, pero esa precisión es solo de microsegundos, por lo que el código que probé fue:

import time print time.time()

que me dio un resultado como este:

1267918039.01

Sin embargo, necesito un resultado que se vea así:

1267918039.331291406

¿Alguien sabe una forma posible de expresar el tiempo de UNIX en segundos y nanosegundos? No puedo encontrar una manera de establecer la precisión adecuada u obtener un resultado en el formato correcto. Gracias por cualquier ayuda


Depende del tipo de reloj y del sistema operativo y del hardware, ya sea que se pueda obtener precisión de nanosegundos. Desde la documentación del módulo de time :

La precisión de las diversas funciones en tiempo real puede ser menor que la sugerida por las unidades en las que se expresa su valor o argumento. Por ejemplo, en la mayoría de los sistemas Unix, el reloj "marca" solo 50 o 100 veces por segundo.

En Python 3, el módulo de time le da acceso a 5 tipos diferentes de reloj, cada uno con diferentes propiedades; algunos de estos pueden ofrecerle un tiempo de precisión de nanosegundos. Use la función time.get_clock_info() para ver qué funciones ofrece cada reloj y en qué hora de precisión se informa.

En mi computadora portátil OS X 10.11, las funciones disponibles son:

>>> for name in (''clock'', ''monotonic'', ''perf_counter'', ''process_time'', ''time''): ... print(name, time.get_clock_info(name), sep='': '') ... clock: namespace(adjustable=False, implementation=''clock()'', monotonic=True, resolution=1e-06) monotonic: namespace(adjustable=False, implementation=''mach_absolute_time()'', monotonic=True, resolution=1e-09) perf_counter: namespace(adjustable=False, implementation=''mach_absolute_time()'', monotonic=True, resolution=1e-09) process_time: namespace(adjustable=False, implementation=''getrusage(RUSAGE_SELF)'', monotonic=True, resolution=1e-06) time: namespace(adjustable=True, implementation=''gettimeofday()'', monotonic=False, resolution=1e-06)

así que usar las time.monotonic() o time.perf_counter() me daría teóricamente una resolución de nanosegundos. Ningún reloj me da tiempo de pared , solo tiempo transcurrido; los valores son por lo demás arbitrarios. Sin embargo, son útiles para medir cuánto tiempo tomó algo.



El problema probablemente esté relacionado con tu sistema operativo, no con Python. Consulte la documentación del módulo de time : http://docs.python.org/library/time.html

time. time()

Devuelve el tiempo como un número de coma flotante expresado en segundos desde la época, en UTC. Tenga en cuenta que, aunque siempre se devuelve el tiempo como un número de coma flotante, no todos los sistemas proporcionan tiempo con una precisión superior a 1 segundo . Si bien esta función normalmente devuelve valores no decrecientes, puede devolver un valor inferior al de una llamada anterior si el reloj del sistema se ha reestablecido entre las dos llamadas.

En otras palabras: si su sistema operativo no puede hacerlo, Python no puede hacerlo. Puede multiplicar el valor de retorno por el orden de magnitud apropiado para obtener el valor de nanosegundo, aunque impreciso.

EDITAR: El retorno es una variable flotante, por lo que el número de dígitos después de la coma variará, independientemente de si su sistema operativo tiene ese nivel de precisión o no. Puede formatearlo con "%.nf" donde n es el número de dígitos que desea, si desea una representación de cadena de puntos fija.


Es poco probable que obtenga precisión de nanosegundos desde cualquier máquina actual.

La máquina no puede crear precisión, y mostrar dígitos significativos donde no es apropiado no es lo correcto.


No creo que haya una manera independiente de la plataforma (tal vez un tercero haya codificado una, pero no la encuentro) para obtener tiempo en nanosegundos; tienes que hacerlo de una manera específica de la plataforma. Por ejemplo, la respuesta de esta pregunta SO muestra cómo hacerlo en la plataforma que suministra una biblioteca del sistema librt.so para operaciones en "tiempo real".


Su precisión simplemente se está perdiendo debido al formateo de cadenas:

>>> import time >>> print "%.20f" % time.time() 1267919090.35663390159606933594