2010-07-22 64 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

相关问题