これについて頭を悩ませるのは難しいようです。
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
>>>
time.mktime()
は、渡されたTupleが現地時間であると仮定します。 calendar.timegm()
は、GMT/UTCであると仮定します。解釈に応じて、タプルは異なる時間を表すため、関数は異なる値を返します(エポックがUTCベースであるため、秒)。
値の差は、ローカルタイムゾーンのタイムゾーンオフセットと等しくなければなりません。
calendar.timegm
はUTCタイムスタンプから変換します time.mktime
はlocalUTCではなく時刻 から変換します。
結果の8時間の差は、現在地のタイムゾーンに正確に対応しています。