2010-07-22 2 views
2

win32timezone.TimeZoneInfo.local().timeZoneName을 호출하면 현재 로캘의 표준 시간대 이름을 제공합니다 (예 : 일본어 컴퓨터의 경우 u"東京 (標準時)"을 반환).비 영어 Windows 시간대 이름을 Python의 Olsen 이름에 어떻게 매핑 할 수 있습니까?

이 이름을 pytz과 함께 사용할 Olsen 데이터베이스 표준 시간대 이름에 매핑하고 싶습니다. CLDR windowZones.xml은 영어 이름을 매핑하는 데 도움이되지만 일본어 이름은 처리 할 수 ​​없습니다.

어떻게 이름을 영어로 다시 변환 할 수 있습니까 (이 경우 Tokyo Standard Time이어야합니다)?

답변

3

dict(win32timezone.TimeZoneInfo._get_indexed_time_zone_keys())은 현재 로캘 이름에서 영어 이름으로 필요한 매핑을 정확하게 반환합니다. 다음 코드는 해결이는 win32timezone.TimeZoneInfo 객체에 접근 할 수 있다면

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) 

대신 개인 메소드를 호출 할 필요없이,하지만, 좋은 것입니다.

+0

GetDynamicTimeZoneInformation은 'TimeZoneKeyName'에 레지스트리 키를 반환하는 것으로 보이며,이 키는 필요한 경우 영문 이름으로 매핑하는 데 사용될 수 있습니다. 이것은 다국어 시스템에서 표준 이름이 XP SP3 이후 현재 로케일에서 반환되기 때문에 가능하면이 방법에 접근하는 데보다 안정적인 방법으로 보입니다 - http://msdn.microsoft.com/en-us/library/ms724253 참조 28v = VS.85 % 29.aspx –

관련 문제