底線是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