web-dev-qa-db-ja.com

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

これについて頭を悩ませるのは難しいようです。

calendar.timegm()time.mktime()の違いは何ですか?

たとえば、datetime.datetime tzinfoが添付されていない場合、2つの出力は同じになりませんか?それらは両方とも、エポックとパラメーターとして渡された日付の間の秒数を与えませんか?渡された日付にはtzinfoがないため、その秒数は同じではありませんか?

>>> 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() は、渡されたTupleが現地時間であると仮定します。 calendar.timegm() は、GMT/UTCであると仮定します。解釈に応じて、タプルは異なる時間を表すため、関数は異なる値を返します(エポックがUTCベースであるため、秒)。

値の差は、ローカルタイムゾーンのタイムゾーンオフセットと等しくなければなりません。

97
sth

calendar.timegmはUTCタイムスタンプから変換します time.mktimelocalUTCではなく時刻 から変換します。

結果の8時間の差は、現在地のタイムゾーンに正確に対応しています。

9
SilentGhost