Diferencia entre los módulos de fecha y hora de Python

137

Estoy tratando de averiguar las diferencias entre el datetimey timemódulos, y lo que cada uno debe ser usado para.

Sé que datetimeproporciona tanto las fechas como la hora. ¿Para qué sirve el timemódulo?

Se agradecerían ejemplos y las diferencias relativas a las zonas horarias serían especialmente interesantes.

myusuf3
fuente

Respuestas:

102

el timemódulo es principalmente para trabajar con marcas de tiempo unix; expresado como un número de coma flotante tomado como segundos desde la época de Unix. el datetimemódulo puede admitir muchas de las mismas operaciones, pero proporciona un conjunto de tipos más orientado a objetos, y también tiene un soporte limitado para zonas horarias.

SingleNegationElimination
fuente
22
Además, ¿cuáles son las diferencias entre timey datetime.time?
SparkAndShine
Sería bueno detallar propiedades como si fuera en tiempo real / monótono. Al igual que en el estándar POSIX, tiene: CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_THREAD, etc. En los relojes POSIX, consulte: stackoverflow.com/questions/3523442/…
Vajk Hermecz
12

Atenerse a time para evitar la ambigüedad del horario de verano.

Utilice exclusivamente el timemódulo del sistema en lugar del datetimemódulo para evitar problemas de ambigüedad con el horario de verano (DST) .

La conversión a cualquier formato de hora, incluida la hora local, es bastante fácil:

import time
t = time.time()

time.strftime('%Y-%m-%d %H:%M %Z', time.localtime(t))
'2019-05-27 12:03 CEST'

time.strftime('%Y-%m-%d %H:%M %Z', time.gmtime(t))
'2019-05-27 10:03 GMT'

time.time()es un número de coma flotante que representa el tiempo en segundos desde la época del sistema. time.time()es ideal para sellado de tiempo inequívoco.

Si el sistema ejecuta adicionalmente el protocolo de tiempo de red (NTP) , uno termina con una base de tiempo bastante sólida.

Aquí está la documentación del timemódulo.

Serge Stroobandt
fuente
En su ejemplo, usted usa time.localtime(), que por supuesto tiene DST incorporado. Si vamos a ser puristas, ¿no deberíamos usar time.gmtime()en su lugar? :)
Seamus
@Seamus Simplemente probando ambos comandos en ipythonprogramas que time.gmtime()arrojan una tupla, mientras que time.time()dan el tiempo de época UNIX como un valor decimal único de segundos transcurridos desde las 00:00:00 UTC, jueves 1 de enero de 1970. La función time.localtime(t)convierte el tiempo de época en local tupla de tiempo Entonces la respuesta a tu pregunta es no".
Serge Stroobandt
¿Hay alguna manera de agregar días a un objeto de tiempo? con datetime está el método timedelta (días = 6).
Nehemias Herrera
@NehemiasHerrera t = time.time()es un número de coma flotante que representa el tiempo en segundos desde la época del sistema. Por lo tanto, uno puede simplemente sumar o restar 86400 segundos por cada día; t += 86400
Serge Stroobandt
5

El módulo de tiempo se puede usar cuando solo necesita el tiempo de un registro en particular, por ejemplo, digamos que tiene una tabla / archivo separado para las transacciones de cada día, entonces solo necesitaría el tiempo. Sin embargo, el tipo de datos de tiempo generalmente se usa para almacenar la diferencia de tiempo entre 2 puntos de tiempo.

Esto también se puede hacer usando datetime, pero si solo estamos tratando con tiempo para un día en particular, entonces se puede usar el módulo de tiempo.

La fecha y hora se usa para almacenar datos y horas particulares para un registro. Como en una agencia de alquiler. La fecha de vencimiento sería un tipo de datos datetime.

Jan S
fuente
3

Si está interesado en las zonas horarias, debe considerar el uso de pytz.

donkopotamus
fuente
8
Parece que está más interesado en los módulos de hora y fecha y hora y las diferencias de zonas horarias entre ellos. con el debido respeto, traer otra dependencia a esto es prácticamente irrelevante.
sbartell
3
El soporte de las zonas horarias en los módulos de hora y fecha y hora es realmente muy pobre ... si realmente está interesado en manejar las zonas horarias de una manera útil, entonces realmente debería saber sobre pytz. Usted trae en dependencias para resolver el problema de que sus dependencias actuales no están ayudando a resolver su problema ...
donkopotamus