Python – calendar.timegm () vs. time.mktime ()

Parece que me cuesta mucho entender esto.

¿Cuál es la diferencia entre calendar.timegm() y time.mktime() ?

Digamos que tengo un datetime.datetime sin tzinfo adjunto, ¿no deberían los dos dar el mismo resultado? ¿No dan ambos la cantidad de segundos entre la época y la fecha pasada como parámetro? Y como la fecha pasada no tiene tzinfo, ¿no es la misma cantidad de segundos?

 >>> import calendar >>> import time >>> import datetime >>> d = datetime.datetime(2010, 10, 10) >>> calendar.timegm(d.timetuple()) 1286668800 >>> time.mktime(d.timetuple()) 1286640000.0 >>> 

time.mktime() asume que la tupla pasada está en hora local, calendar.timegm() asume que está en GMT / UTC. Dependiendo de la interpretación, la tupla representa un tiempo diferente, por lo que las funciones devuelven valores diferentes (segundos desde la época en UTC).

La diferencia entre los valores debe ser igual al desplazamiento de zona horaria de su zona horaria local.

calendar.timegm convierte de la marca de hora UTC, time.mktime convierte de la hora local no UTC .

La diferencia de 8 horas en sus resultados corresponde exactamente a la zona horaria de su ubicación.