Суть в том, что с VC версии 6 tzset () не работает должным образом.Однако с VC версии 8 tzset () теперь работает (я думаю, что это может работать и в версии 7, но у меня нет этой версии для проверки).
Так что все, что должно произойти сейчас, это включить HAVE_WORKING_TZSET в исходном коде и перекомпилировать (и протестировать).
По моему опыту, все потребности функций для различных настроек TZ должны иметь работающий tzset (),Вы должны вызывать tzset () каждый раз, когда вы меняете C Lang TZ var -или- Windows TIME_ZONE_INFORMATION.Это было невозможно в VC версии 6, и поэтому HAVE_WORKING_TZSET не включен (но теперь он должен быть включен как минимум для VC версии 8 и выше).
Кстати.Для всего, что я делаю с датой и временем, у меня всегда есть SetUtcTime () и UnsetUtcTime (), которые устанавливают TZ в GMT и вызывают tzset () соответственно.У меня также есть функции для установки временного пояса.Это ЕДИНСТВЕННЫЙ способ сделать это правильно!По многолетнему опыту могу сказать, что все остальное - проблема.И calendar.timegm () не является правильным.Используйте tzset ().
Вот доказательство того, что оно теперь работает (поэтому обратитесь к автору ошибки, чтобы исправить код Windows):
(Я набрал это с другого компьютера, так что, надеюсь, никаких орфографических ошибок,но это точка, которую я делаю, а не код).
ПРИМЕЧАНИЕ: ВСЕ НИЖЕ - ПИФОН (я вызываю C Lang из интерфейса ctype Python) ПРИМЕЧАНИЕ: потому что я устанавливаю TZ через границу DLLздесь и нить локальная и вся эта хрень, ее нельзя использовать в качестве обходного пути.Необходимо повторно включить 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 работает сейчас! </p>
(так что если HAVE_WORKING_TZSETопределено для (версия 8 и выше) вы получите это:)
-> ... 11:02:40 ... (python)
-> ... 11:02:40... (C lang)
Просто проверьте исходный код, чтобы понять, что я имею в виду.
Я проверил это с последней версией Python '2.0': 2.7.2 только сейчас.