2010-07-22 72 views
2

如果我打電話給win32timezone.TimeZoneInfo.local().timeZoneName,它給了我當前語言環境中的時區名稱(例如,在日語機器上,它返回u"東京 (標準時)")。如何將非英文Windows時區名稱映射到Python中的Olsen名稱?

我想將此名稱映射到Olsen數據庫時區名稱,以便與pytz一起使用。 CLDR windowZones.xml幫助我映射英文名稱,但無法處理日文名稱。

如何將名稱轉換回英文(在這種情況下應該是Tokyo Standard Time)?

回答

3

dict(win32timezone.TimeZoneInfo._get_indexed_time_zone_keys())準確地返回我需要從當前語言環境名稱到英文名稱的映射。下面的代碼解決它:

import win32timezone 
    win32tz_name = win32timezone.TimeZoneInfo.local().timeZoneName 
    win32timezone_to_en = dict(win32timezone.TimeZoneInfo._get_indexed_time_zone_keys()) 
    win32timezone_name_en = win32timezone_to_en.get(win32tz_name, win32tz_name) 
    olsen_name = win32timezones.get(win32timezone_name_en, None) 
    if not olsen_name: 
     raise ValueError(u"Could not map win32 timezone name %s (English %s) to Olsen timezone name" % (win32tz_name, win32timezone_name_en)) 
    return pytz.timezone(olsen_name) 

這將是很好,如果這是在win32timezone.TimeZoneInfo對象訪問,雖然,而不必調用私有方法。

+0

似乎GetDynamicTimeZoneInformation返回'TimeZoneKeyName'中的註冊表項,然後可以根據需要映射到英文名稱上。如果可能的話,這似乎是更穩定的方法,因爲在多語言系統上,自XP SP3以來,標準名稱在當前語言環境中返回 - 請參閱http://msdn.microsoft.com/en-us/library/ms724253% 28V = VS.85%29.aspx – 2011-08-22 07:51:49

相關問題