58 votes

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

J'ai du mal à me faire à cette idée.

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

Disons que j'ai un datetime.datetime sans tzinfo attaché, les deux ne devraient-ils pas donner le même résultat ? Ne donnent-ils pas tous deux le nombre de secondes entre l'époque 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
>>>

97voto

sth Points 91594

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

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

10voto

SilentGhost Points 79627

calendar.timegm convertit le timestamp UTC, time.mktime convertit de local le temps n'est pas UTC .

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X