底线是VC ver 6,tzset()无法正常工作。然而,使用VC版本8 tzset()现在可以工作(我认为它也可以在版本7中工作,但我没有该版本来检查)。
因此,所有有到现在发生的是启用的源代码,并重新编译(和测试)HAVE_WORKING_TZSET。根据我的经验,TZ不同设置的所有功能需求都需要有一个可用的tzset()。无论何时您更改C Lang TZ var - 或Windows TIME_ZONE_INFORMATION,都必须调用tzset()。这在VC版本6中是不可能的,这就是为什么HAVE_WORKING_TZSET没有启用(但现在应该至少是VC版本8以上)。
顺便说一句。对于我所做的所有日期/时间的事情,我总是有一个将TZ设置为GMT的SetUtcTime()和UnsetUtcTime(),并相应地调用tzset()。我也有功能 以温度设置为另一个时区。这是正确使用它的唯一方法!在多年的经验中,我可以说任何事情都是麻烦。而calendar.timegm()不是 正确。使用tzset()。
这里是证明它现在的工作(所以去的bug笔者修复Windows代码):
(我打这从另一台计算机,所以希望没有拼写错误,但它是 一点,我做,而不是代码)。
注:所有下面是PYTHON NOTE(我从Python的CTYPE接口调用C郎):因为我通过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分四十秒......(蟒蛇)
- > ...... 21时02分四十秒...(C浪)
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版本8正在工作!
(所以如果HAVE_WORKING_TZSET为(8版本及以上)所定义的,你会得到这样:)
- > ...... 11时02分40秒......(蟒蛇)
- > ... 11 :02:40 ...(C lang)
只需检查源代码,看看我的意思。
我用最新的python'2.0'系列检查了这个:2.7.2刚才。
我可以证实这一点,看起来像一个bug给我。 – AndiDog 2010-12-05 20:51:02
为什么需要评估? – 2010-12-05 21:12:59