まず、time.strftime('%Z')
フォーマットに含めないでください。現在の GMT オフセット (夏時間のオフを含む) を伝えており、[おそらく] それを使用して tm_isdst を設定しています。
それがなければ、次の構造体を取得する必要がありますtm_isdst=-1
。
>>> time1 = time.strptime("2012-06-01 12:00:00", "%Y-%m-%d %H:%M:%S")
>>> time1
time.struct_time(tm_year=2012, tm_mon=6, tm_mday=1, tm_hour=12, tm_min=0,
tm_sec=0, tm_wday=4, tm_yday=153, tm_isdst=-1)
これを mktime に渡すことができます。mktime は、値を指定すると-1
、DST 値を「推測」します (あいまいな 2AM の場合を除いて常に正しいため、「推測」を引用符で囲みます)。これにより、絶対時間がtime()
形式で表示されます。
>>> time.mktime([previous value]) # my timezone is US Eastern
1338566400.0
次に、この値を使用して localtime を呼び出すと、DST フラグが正しく設定されます。
>>> time.localtime(1338566400).tm_isdst
1
strptime ステップをスキップして、値を直接 mktime に渡すこともできます。
>>> time.mktime((2012,6,1,12,0,0,-1,-1,-1))
1338566400.0