つまり、VC ver 6では、tzset()が正しく機能しません。ただし、VC ver 8ではtzset()が機能するようになりました(ver 7でも機能する可能性がありますが、確認するバージョンがありません)。
したがって、今必要なのは、ソースコードでHAVE_WORKING_TZSETを有効にして、再コンパイル(およびテスト)することだけです。
私の経験では、TZのさまざまな設定に対する関数のすべてのニーズには、動作するtzset()が必要です。C Lang TZvarまたはWindowsTIME_ZONE_INFORMATIONを変更するときはいつでも、tzset()を呼び出す必要があります。これはVCver6では不可能でした。そのため、HAVE_WORKING_TZSETは有効になっていません(ただし、少なくともVC ver 8以降では有効になっているはずです)。
ところで。私が行うすべての日付/時刻については、常にSetUtcTime()とUnsetUtcTime()があり、TZをGMTに設定し、それに応じてtzset()を呼び出します。また、別のタイムゾーンに一時的に設定する機能もあります。これが適切に行う唯一の方法です!長年の経験で、私は他に何でも問題があると言うことができます。また、calendar.timegm()は正しくありません。tzset()を使用します。
これが現在機能している証拠です(したがって、バグの作成者にWindowsコードを修正してください):
(私はこれを別のコンピューターから入力したので、スペルミスがないことを願っていますが、コードではなく、私が作成したポイントです)。
注:以下はすべてPYTHONです(PythonのctypeインターフェイスからC Langを呼び出しています)注:ここではDLL境界を介してTZを設定し、ローカルスレッドとそのすべてのがらくたをスレッド化するため、回避策として使用できません。HAVE_WORKING_TZSETを再度有効にする必要があります。
import time
from ctypes import *
dTime = time.time ()
nTime = int (dTime)
intTime = c_int (nTime)
print time.ctime (dTime)
print c_char_p (cdll.msvcrt.ctime (addressof (intTime))).value
-> ... 21:02:40 ...(python)
-> ... 21:02:40 ...(C lang)
cdll.msvcrt._putenv ('TZ=GMT')
cdll.msvcrt._tzset ()
(通常、time.tzset()が呼び出され、inittimezone()も呼び出されて、Pythonのタイムゾーン変数も更新されます)
print time.ctime (dTime)
print c_char_p (cdll.msvcrt.ctime (addressof (intTime))).value
-> ... 21:02:40 ...(python)
-> ... 11:02:40 ...(C lang)<-基盤となるVC ver 8が動作しています!
(したがって、HAVE_WORKING_TZSETが(バージョン8以降)に対して定義されている場合、これを取得します:)
-> ... 11:02:40 ...(python)
-> ... 11:02:40 ...(C lang)
ソースコードをチェックして、私が何を意味するかを確認してください。
私はこれを最新のpython'2.0'シリーズでチェックしました:2.7.2。