He estado buscando por toda la red y no pude encontrar una solución adecuada para este problema
OverflowError: mktime argument out of range
El código que causa esta excepción.
t = (1956, 3, 2, 0, 0, 0, 0, 0, 0) ser = time.mktime(t)
Me gustaría saber el motivo real de esta excepción, algunos dicen que la fecha no está en un rango válido pero no tiene ningún sentido para mí, y si hay un rango, podría ser. Depende del sistema que estemos utilizando. También me gustaría saber una buena solución para este problema.
Gracias.
time.mktime
llama a la función mktime
subyacente desde la biblioteca C de la plataforma. Por ejemplo, el código anterior que publicaste funciona perfectamente bien para mí en Mac OS X, aunque devuelve un número negativo ya que la fecha es anterior a la época de Unix. Entonces, la razón es que la implementación mktime
su plataforma probablemente no admita fechas antes de la época de Unix. Puede usar el módulo datetime
de Python para construir un objeto datetime
correspondiente a la fecha anterior, restarlo de otro objeto datetime
que representa la época de Unix y usar el objeto timedelta
calculado para obtener el número de segundos desde la época:
from datetime import datetime epoch = datetime(1970, 1, 1) t = datetime(1956, 3, 2) diff = t-epoch print diff.days * 24 * 3600 + diff.seconds
Actualización : si está usando Python 2.7 o superior, simplemente podría usar print diff.total_seconds()
como se indica a continuación en el comentario de Chad Miller.