Marca de tiempo fuera de rango para la función localtime () / gmtime () de la plataforma

Lo bash:

ts = -216345600000 datetime.datetime.fromtimestamp(ts/1000) 

ValueError: marca de tiempo fuera de rango para la función localtime () / gmtime () de la plataforma

Verifico el valor del epoconvertidor : -216345600 su retorno GMT: Sáb, 23 de febrero 1963 00:00:00 GMT

¿Cómo obtener el resultado correcto?

Para muchos valores, como demasiado lejos en el pasado o en el futuro, solo alimentar la marca de tiempo a fromtimestamp() se quejará con un error fuera de rango. Sin embargo, puede calcular la fecha utilizando timedelta() relativa a la época.

 >>> from datetime import datetime, timedelta >>> date = datetime(1970, 1, 1) + timedelta(seconds=-216345600) >>> date datetime.datetime(1963, 2, 23, 0, 0) >>> date.strftime('%a, %d %b %Y %H:%M:%S GMT') 'Sat, 23 Feb 1963 00:00:00 GMT' 

Sin embargo, tenga en cuenta que no puede usar esto para volver a la era de los dinosaurios, ya que datetime() todavía tiene un valor mínimo y máximo que puede admitir.

 >>> datetime(1970, 1, 1) + timedelta(seconds=-62135596800) datetime.datetime(1, 1, 1, 0, 0) >>> datetime(1970, 1, 1) + timedelta(seconds=253402300799) datetime.datetime(9999, 12, 31, 23, 59, 59) >>> datetime(1970, 1, 1) + timedelta(seconds=253402300800) Traceback (most recent call last): File "", line 1, in  datetime(1970, 1, 1) + timedelta(seconds=253402300800) OverflowError: date value out of range 

timedelta() tiene sus límites, pero con la época como punto de referencia, ni siquiera nos hemos acercado a ellos.

 >>> timedelta(microseconds=1000000000*86400*10000-1) datetime.timedelta(9999999, 86399, 999999) 

Quizás un poco menos relacionado con el problema de la pregunta, pero puede ser aplicable a aquellos que desean representar el rango completo de fecha y hora sin ninguna solución muy específica a las limitaciones de la implementación de datetime predeterminada.

He revisado algunas bibliotecas y sugiero usar:

dateparser – para analizar la fecha / hora declarada naturalmente para un ser humano y en multitud de idiomas.

arrow : reemplazo datetime de datetime sin sus limitaciones (por ejemplo, posibilidad de representar fechas antes y cerca de la época de 1. año AD).