web-dev-qa-db-fra.com

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

Il me semble que j'ai du mal à comprendre cela.

Quelle est la différence entre calendar.timegm() et time.mktime()?

Dis que j'ai un datetime.datetime sans tzinfo attaché, les deux ne devraient-ils pas donner la même sortie? Ne donnent-ils pas tous les deux le nombre de secondes entre Epoch et la date passée en paramètre? Et puisque la date passée n'a pas de tzinfo, ce nombre de secondes n'est-il pas le même?

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

time.mktime() suppose que le Tuple passé est en heure locale, calendar.timegm() suppose qu'il est en GMT/UTC. En fonction de l'interprétation, le tuple représente une heure différente, donc les fonctions renvoient des valeurs différentes (les secondes depuis l'époque sont basées sur UTC).

La différence entre les valeurs doit être égale au décalage de fuseau horaire de votre fuseau horaire local.

97
sth

calendar.timegm convertit à partir de l'horodatage UTC, time.mktime convertit à partir de heure locale et non UTC .

Une différence de 8 heures dans leurs résultats correspond exactement au fuseau horaire de votre emplacement.

9
SilentGhost